学生证管理系统(C语言课程设计).pdf
《学生证管理系统(C语言课程设计).pdf》由会员分享,可在线阅读,更多相关《学生证管理系统(C语言课程设计).pdf(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言课程设计报告学 院:地 球 科 学 学 院专 业:资源环境与城乡规划管理题 目:学 生 证 管 理 系 统班 号:014072-XX姓 名:李 仙 伟学 号:XXXXXXXX指 导 教 师:XXXXXXXX2010年11月2 6日报告目录一、课程设计目的.3二、实习内容及要求.3三、需求分析.3四、总体分析.3五、详细设计.45.0 头 文 件 及 结 构 体.45.1 主 函 数.55.2菜单 模 块.55.3 添 加 模 块.65.4 修 改模块.105.5 浏 览模块.145.6 查询 模 块.155.6.1按学号查询.155.6.2按名字查询.165.6.3按班级查询.175.7
2、统计模块.185.7.1男生信息.195.7.2女生信息.215.7.3全体学生信息.235.8删除模块.23六、上机操作.266.1系统说明.266.2系统测试.26七、总 结.32八、源 代 码.32一、课程设计目的通过实践,学会编制结构清晰、风格良好、数据结构适当的C语言程序,加深对C语言基础知识的理解和掌握,进一步巩固C语言编程实践能力,锻炼思维逻辑和解决综合性实际问题的能力。二、实习内容及要求1、用 C 语言编写一个学生证管理系统,该系统具有以下功能:(1)录入某位学生的学生证信息;(2)给定学号,显示某位学生的学生证信息;(3)给定某个班级的班号,显示该班所有学生的学生证信息;(4
3、)给定某位学生的学号,修改该学生的学生证信息;(5)给定某位学生的学号,删除该学生的学生证信息;(6)提供一些统计各类信息的功能;(7)提供浏览所有学生的学生证信息的功能。2、输入要求应用程序运行后,在屏幕上显示一个菜单;用户可以根据要求,选定相应的操作项目;进入某个操作后,根据应用程序的提示,从键盘输入相应的信息。3、输出要求(1)应用程序运行后,要在屏幕上显示一个菜单;(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。三、需求分析根据题目要求,学生信息要从文本文件中存取,所以本程序应该提供读写文件,显示、统计、查询、修改记录,保存文件等操作,此外,还
4、应该提供键盘式选择菜单实现功能。四、总体设计根据需求分析,可以把这个系统的设计分为添加、修改、查询、浏览、统计、删除六大模块,其中查询模块可以分为三个子模块,统计模块可以分为三个子模块,子模块下面还有子函数;系统功能模块图如下所示:五、详细设计5.0头文件及结构体#include#include#include#define N 100struct Class(char Cname20;char Cno|20;);struct Studentchar Sname20;char Sex10;班级班名班号学生姓名性别char Sno20;int Age;struct Class CInfo;Stu
5、InfoN;学号/年龄嵌套结构体,表示班级信息结构体数组,用作读取和存放临时数据5.1主函数void main()menu();getchar();菜单5.2菜单void menu()(int chose;int right;doprintf(ntttt 学生证管理系统n);printf(.);p rin tf(菜单:tl-添加t2-修改t3-浏览全部t4-查询t5-统计t6-删除t7-退出n);printf(.);printf(请输入数字选择:);scanf(%d,&chose);if(chose8)(right=l;printf(输入错误,请重新输入!n);getchar();else r
6、ight=O;while(right=l);switch(chose)case l:add();break;添加模块case 2:modify。;break;修改模块case 3:browse();break;浏览模块case 4:quiry();break;查询模块case 5:stastic();break;统计模块case 6:Delete();break;删除模块case 7:exit(0);退出)5.3添加模块首 先 要 判 断 文 件Stulnfo.tx t是否存在,如果存在就以读写(r+)的方式打开,如果不存在,就以写(w)的方式创建文件Stulnfo.tx to输入格式要求:性
7、别为男或女,学号为1 1位且不能重复,年龄在0700之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。此外,如果以读写的方式打开,还要判断记录数numN是否成立,因为结构体数组的大小为N,当num=N时-,表示已满,不能再存储数据,需要修改N的值。void add()if(fp=fopen(StuInfo.txt,r+,)=NULL)以读写方式打开(int num;表示记录数int i;int age;char sno20;char sex20|;char cno20J;int right;FILE*fp;临时变量,用于验证输入的性别是否满足条件临时变量,用于
8、验证输入的学号是否满足条件临时变量,用于验证输入的性别是否满足条件临时变量,用于验证输入的班号是否满足条件if(fp=fopen(StuInfo.txt,w)=NULL)文件不存在就创建文件printf(1n文件不存在且创建失败,返回!n);menu();)printf(”n 请按照提示输入学生信息:nn”);printf(姓名:);scanf(,%s,&StuInfo0.Sname);doprintf(n 性别(男或女)scanf(%ssex);if(strcmp(sex,男)!=0)&(strcmp(sex,“女)!=0)(printf(输入错误,请输入男或女!n)right=l;getc
9、har();)else right=O;while(right=l);strcpy(Stul nfo 0.Sex,sex);do(printf(n 学 号(11 位)scanf(M%sM,sno);if(strlen(sno)!=l 1)printf(输入错误,学号长度应为11位数!n);right=l;getchar();else right=O;while(right=l);strcpy(StuInfo0.Sno,sno);do(printf(nn 年龄:);scanf(%d,&age);if(age 100)(printf(年龄应在0-100之间,请重新输入年龄!n);right=l;g
10、etchar();)else right=O;)while(right=l);Stu!nfo|0|.Age=age;do(printf(n 班 号(6 位):”);scanf(M%sn,cno);if(strlen(cno)!=6)(printff输入错误,班号长度应为6 位数!n);right=l;getchar();)else right=O;while(right=l);strcpy(StuInfoOJ.CInfo.Cno,cno);printf(n 班名:);scanf(n%su,&StuInfo0.CInfo.Cname);fprintf(fp,n%st%st%st%dt%st%s,
11、Stulnfo0.Sname,StuInfo|0|.Sex,StuInfo0.Sno,StuInfo0.Age,StuInfo0.CInfo.Cno,StuInfo0.CInfo.Cname);fclose(fp);printf(”n 保存成功!n);printf(n请按enter键返回主菜单!n);getchar();getchar();menu();)以上的输入是以写的方式输入,下面是以读写的方式输入数据for(i=0;!feof(fp);i+)(fscanf(fp,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuI
12、nfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname);num=i;记录数if(num=N)(printf(”n 保存记录数超出结构体数组数的大小,请先修改N 的值!n);printf(n请按enter键返回主菜单!n);getchar();getchar();menu();)printf(An请按照提示输入学生信息:nn);printf(姓名:scanf(%s n,&StuInfo num.S name);do(printf(n 性 别(男 或 女):);scanf(M%su,sex);if(strcmp(sex,男)!=0)&(strcmp(
13、sex,女)!=0)(printf(输入错误,请输入男或女!n);right=l;getchar();else right=O;while(right=l);strcpy(Stulnfo|num.Sex,sex);do(printf(n 学 号(11 位):”);scanf(s”,sno);if(strlen(sno)!=11)(printf(输入错误,学号长度应为11位数!n);right=l;getchar();else right=O;for(i=0;inum;i+)(if(strcmp(sno,StuInfoi.Sno)=0)printf(该学号已经存在,请重新输入!n“);right
14、=1;getchar();while(right=l);strcpy(StuInfonum.Sno,sno);do(printf(n 年龄:);scanf(M%d,&age);if(age 100)(printf(年龄应在0-100之间,请重新输入年龄!n);right=l;getchar();)else right=O;while(right=l);StuInfonum.Age=age;do(printf(n 班 号(6 位)scan eno);if(strlen(cno)!=6)(printf(输入错误,班号长度应为6 位数!n);right=l;getchar();)else right
15、=O;while(right=l);strcpy(StuInfonuml.CInfb.Cno,cno);printfCn 班名:);scanf(%s”,&StuInfonum.CInfo.Cname);把该记录写到文件末尾fprintf(fp,n%st%st%st%dt%st%s,StuInfonum.Sname,StuInfonum.Sex,Stunfbnum.Sno,StuInfbnum.Age,StuInfonum.CInfo.Cno,StuInfonum.CInfo.Cname);fclose(fp);printfCn 保存成功!n);printf(n请按enter键返回主菜单!n);
16、getchar();getchar();menu();5.4 修改模块先判断文件S tu l n f o.t x t 以读(r)的方式能否打开,不能就返回,可以就读入记录;然后输入学号查找记录,没找到就返回,找到就按照提示修改该记录,与输入模块一样,输入的格式要求:性别为男或女,学号为 1 1 位且不能与除当前修改的记录的学号外的记录的学号重复,年龄在0-1 0 0 之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。输入完成后,再以写(w)的方式创建文件,不能创建就返回,可以就将结构体数组中的所有记录保存到文件中,这与添加稍有差别,最后返回主菜单。void m
17、odifyOint num;inti;int right;int age;char sex20;char cno20;char sno20;int found=-l;char StuNO20;FILE*fpr,*fpw;if(fpr=fopen(,StuInfo.txtM;,r,)=NULL)(fpr=fopen(StuInfo.txt,r)=NULL否_ _ _ _+读取文件_ X_输入学号是否存在该学号的记录是根据原示输入新信息 是(fpw=fopen(,StuInfo.txt,w)=NULL否_ X_保存数据?是 主金单printfC文件打不开!nn);menu();)for(i=0;!
18、feof(fpr);i+)/(fscanf(fpr,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname);num=i;fclose(fpr);printf(An请输入学号选择要修改的记录:”);scanf(H%sn,StuNO);for(i=0;inum;i+)(if(strcmp(StuNO,StuInfoi.Sno)=0)(found=i;printfC*n你要修改的学生信息为:nnn);printfC姓名 性别 学号
19、 年龄 班号 班名n);printf(n%st%st%st%dt%st%snn,StuInfbi.Sname,StuInfoi.Sex,StuInfoi.Sno,StuInfoi.Age,StuInfoi.CInfo.Cno,StuInfoi.CInfo.Cname);printf(n请按照提示输入学生的新信息:n”);printf(姓名:);scanf(s”,&StuInfofound.Sname);do(printf(n 性 别(男 或 女):);scanf(s”,sex);if(strcmp(sex,男)!=0)&(strcmp(sex,“女)!=0)(printf(输入错误,请输入男或
20、女!n);right=l;getchar();)else right=O;while(right=l);strcpy(Stu 1 nfo|fou nd J.Sex,sex);do(printf(n 学 号(11 位):);scanf(n%sn,sno);if(strlen(sno)!=11)(printf(输入错误,学号长度应为11位数!n);right=l;getchar();else right=O;for(i=0;inum;i+)(if(i!=found)&(strcmp(sno,StuInfoi.Sno)=0)printf(该学号已经存在,请重新输入!n);right=1;getcha
21、r();while(right=l);strcpy(Stu I nfo found.Sno,sno);doprintf(n 年龄:);scanf(%d,&age);if(age 100)(printf(年龄应在0-100之间,请重新输入年龄!n);right=l;getchar();)else right=O;while(right=l);Stulnfofound.Age=age;do(printf(n 班 号(6 位):”);scan f(n%sn,eno);if(strlen(cno)!=6)(printf(输入错误,班号长度应为6 位数!n);right=l;getchar();)els
22、e right=O;while(right=l);strcpy(StuInfofound.CInfo.Cno,cno);printfCn 班名:);scanf(%s”,&StuInfofound.CInfo.Cname);if(fpw=fopen(,StuInfo.txtM,w,)=NULL)(printf(文件打不开,保存失败!nf);menu();)for(i=0;inum;i+)保存文件(fprintf(fpw,nn%st%st%st%dt%st%sStuInfoi.Sname,StuInfoi.Sex,StuInfoi.Sno,StuInfoi.Age,StuInfbi.CInfo.C
23、no,StuInfoi.CInfo.Cname);)fclose(fpw);printf(nn 修改成功!nu);printf(n请按enter键返回主菜单!n);getchar();getchar();menu();)if(found0)printf(n没有找到该学号的记录:n);printf(Mn 请按enter键返回主菜单!n);getchar();getchar();menu();5.5 浏览模块void browse()int num;int i;FILE*fp;if(fp=fopen(,StuInfo.txt,r)=NULL)(printf(文件打不开!nu);menu();)fo
24、r(i=0;!feof(fp);i+)fscanf(fp,%s%s%s%d%s%s,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname);)fclose(fp);num=i;printf(n已添加d 个学生信息nn”,num);printf(姓名 性别 学号 年龄 班号 班名 屋);for(i=0;inum;i+)printf(n%st%st%st%dt%s%sn,StuInfoi.Sname,StuInfoi.Sex,StuInfoi.Sno,S
25、tuInfoi.Age,StuInfoi.CInfo.Cno,StuInfbi.CInfo.Cname);printf(An请按enter键返回主菜单!n);getchar();getchar();menu();)5.6 查询模块void quiry()(int chose;int right;do(printf(”nl-按学号查询t2-按姓名查询t3.某班学生信息t4 返回n”);printf(”n 请输入数字选择scanf(,%d,&chose);if(chose4)(right=l;getchar();)else right=O;while(right=l);switch(chose)(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生证 管理 系统 语言 课程设计
限制150内