C语言课程设计实验报告一、设计目的:学生信息包括:学号、姓名、性别、系名、班级名、出生年月、住址、电话号码。设计一学生信息管理系统,使之能提供以下功能:1.系统以菜单方式工作;2.学生信息录入功能(输入);3.学生信息浏览功能(输出);4.学生信息检索功能;5.学生信息的删除与修改功能;二、总体设计思路:1程序设计组成框图主菜单添加新的学生信息浏览所有学生信息检索学生信息按学号检索按姓名检索修改此同学信息删除此同学信息检索信息库添加新的学生信息删除所有记录保存并退出C语言程序设计实验报告22N-S流程图case‘4’case‘3’Case’2’case‘1’结束调用add()添加新的学生信息fileopen()Menu()输入选择x调用scan()浏览所有学生信息退出系统调用res()检索学生信息x开始filesave()C语言程序设计实验报告3三、详细设计说明:1头文件#includestdio.h#includestdlib.h#includestring.h#includeconio.h2数入口说明main();主函数;voidmenu();主菜单界面;voidadd();添加新的学生信息;voidprint(inti);打印学生信息;voidscan();查找学生信息;voidres();检索学生信息界面;voidres_name();按姓名检索;voidres_num();按学号检索;voiddel(inti);删除学生信息;voidmodify(inti);修改学生信息;voidfileopen();打开文件;voidfilesave();保存文件;2调用关系main()fileopen()filesave()menu()add()scan()res()res_num()res_name()modify(inti)del(inti)menu()add()menu()res()add()menu()C语言程序设计实验报告44.调试与测试:编译工具1.C/C++程序设计学习与实验系统2.TcC语言程序设计实验报告53.VC++6.0均通过调试!C语言程序设计实验报告6主菜单添加新的学生信息浏览所有学生信息C语言程序设计实验报告7检索信息库继续查找下一条C语言程序设计实验报告8修改学生信息删除信息库所有记录C语言程序设计实验报告9五、调试中所遇到的问题及解决方法1问题:程序退出后,再次打开,上次输入的数据无法保存。解决:调用fileopen()与filesave()保存文件数据,方便第二次打开程序时仍能调用上次输入的数据。2问题:跳出的界面与选择分支中的对应项不符合。解决:改getchar()为getch(),头文件中加”conio.h”.因为getchar()从输入输出流中一次只能读取一个字符,而且需要以回车来确认输入。本文件中多次用到getchar(),键盘缓冲区的’\n’会被下次调用getchar()时接收。而getch()则不会,从键盘上读入一个数据,不给回显,不需要回车确认,按下键就实现了函数。3问题:误输入X,导致退出。解决:加标志变量flag=1,用while(flag)循环switch语句,当正确输入时,flag=1,跳出循环。4问题:检索时只能查到第一个学生信息。解决:定义数组log(100)记录符合的结构体数组。循环打印。5问题:不能刷新界面。解决:调用system(“cls”)清屏函数。C语言程序设计实验报告106问题:删除某项信息,返回主函数时不能暂停。解决:调用system(“PAUSE”)暂停函数。六、程序源码#includestdio.h#includestring.h#includestdlib.h#includeconio.hvoidmenu();//声明所有函数;voidadd();voidprint(inti);voidscan();voidres();voidres_name();voidres_num();voiddel(inti);voidmodify(inti);voidfileopen();voidfilesave();;//定义全局变量x,减少代码量;intn=0;//定义全局变量n,代表信息条数;structstudent//定义结构体数组stu[100];{charnum[15];charname[30];charsex[2];charxi[30];charban[10];C语言程序设计实验报告11charbirth[10];charaddress[30];chartel[20];}stu[100];voidmain()//主函数;{fileopen();menu();//调用menu()函数,打开主界面;filesave();}voidfileopen()//打开data文件;{FILE*fp;inti;if((fp=fopen(data,r+))==NULL)//若无data文件,则新建;fp=fopen(data,w+);for(i=0;i100;i++)//读取数据;fread(&stu[i],sizeof(structstudent),1,fp);fread(&n,4,1,fp);fclose(fp);}voidmenu()//主菜单;{intflag=1;//定义标志标量flag;system(cls);//清屏函数;printf(┌────────────────────┐\n);//主界面;printf(│☆欢迎登录学生信息管理系统★│\n);printf(││\n);printf(│1.添加新的学生信息│\n);printf(│2.浏览所有学生信息│\n);printf(│3.检索学生信息│\n);printf(│4.保存并退出系统│\n);printf(││\n);printf(│byrlk│\n);printf(└────────────────────┘\n);while(flag)//防止用户误选导致退出;switch(getch())//用switch分支选择语句;getch()获取用户键入值;{case'1':flag=0;add();break;//当用户选择1时,调用add()函数,添加新的学生信息;case'2':flag=0;scan();break;//当用户选择2时,调用scan()函数,浏览所有学生信息;case'3':flag=0;res();break;//当用户选择3时,调用res()函数,检索学生信息;case'4':flag=0;printf(√保存成功!);break;//当用户选择4时,调用flag()函数,退出系统;default:printf(※错误!请重新输入..\n);//其它输入,提示错误;}}voidadd()//信息添加函数;{intflag=1;C语言程序设计实验报告12system(cls);//清屏函数;printf(──────────%2d───────────\n,n+1);//逐一输入各项数据;printf(*添加新的学生信息*\n);printf(①学号:);scanf(%s,&stu[n].num);printf(②姓名:);scanf(%s,&stu[n].name);printf(③性别:);scanf(%s,&stu[n].sex);printf(④系名:);scanf(%s,&stu[n].xi);printf(⑤班级名:);scanf(%s,&stu[n].ban);printf(⑥出生年月:);scanf(%s,&stu[n].birth);printf(⑦住址:);scanf(%s,&stu[n].address);printf(⑧电话号码:);scanf(%s,&stu[n].tel);printf(──────────────────────\n);printf(\n√添加成功!\n\n☆请选择:1.继续添加2.返回主菜单\n);n++;//总信息量增加一项;while(flag)switch(getch()){case'1':flag=0;add();break;//选择'1',重新调用add();case'2':flag=0;menu();break;//选择'2',调用menu(),返回主菜单;default:printf(※错误!请重新输入..\n);//其它输入,提示错误;}}voidprint(inti)//学生信息打印函数;{printf(──────────%2d──────────\n,i+1);printf(①学号:%s\n,stu[i].num);printf(②姓名:%s\n,stu[i].name);printf(③性别:%s\n,stu[i].sex);printf(④系名:%s\n,stu[i].xi);printf(⑤班级名:%s\n,stu[i].ban);printf(⑥出生年月:%s\n,stu[i].birth);printf(⑦住址:%s\n,stu[i].address);printf(⑧电话号码:%s\n,stu[i].tel);printf(─────────────────────\n);}voidscan()//信息浏览函数;{inti,flag=1;system(cls);if(n==0)//当n==0时,信息库中无记录;{printf(──────────────────────\n);printf(当前信息库记录为0!\n);printf(──────────────────────\n);printf(☆请选择:1.添加新的学生信息2.返回主菜单\n);while(flag)switch(getch())C语言程序设计实验报告13{case'1':flag=0;add();break;case'2':flag=0;menu();break;default:printf(※错误!请重新输入..\n);}}else//当n不为0时,打印信息;{printf(**********目前信息库里共有%d条记录.*********\n,n);for(i=0;in;i++)print(i);printf(☆请选择:1.检索信息库2.添加新的学生信息\n);printf(3.删除所有记录4.返回主菜单\n);while(flag)switch(getch()){case'1':flag=0;res();break;case'2':flag=0;add();break;case'3':flag=0;printf(\n!!!!!!!!!!!!警告:您将删除信息库所有记录!!!!!!!!!!!!\n);printf(\n☆请选择:1.确认删除2.返回\n);flag=1;while(flag)switch(getch()){case'1':flag=0;n=0;printf(√已删除!\n);system(PAUSE);scan();break;case'2':flag=0;scan();default:printf(※错误!请重新输入..\n);}break;case'4':flag=0;menu();break;default:printf(※错误!请重新输入..\n);}}}voidmodify(inti)//信息修改函数;{intflag=1;printf(────────────────────────\n);//信息修改界面;printf(☆请输入你想修改的内容:\n);printf(1.学号2.姓名3.性别4.系名\n);printf(5.班级名6.出生年月7.住址8.电话号码\n);printf(────────────────────────\n);while(flag)switch(getch()){case'1':flag=0;printf(请重新输入学号:);scanf(%s,&stu[i].num);break;case'2