《C语言学籍管理系统(内含源代码)解析(共24页).doc》由会员分享,可在线阅读,更多相关《C语言学籍管理系统(内含源代码)解析(共24页).doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 学籍管理系统 一 、系统简介设计一个基于结构体数组的学生学籍管理系统,能实现对学生学籍信息进行录入,修改,删除,查询和输出等基本操作。二、 需求分析学籍管理系统应该实现以下功能:1、 能录入学生的基本信息,包括学号,姓名,专业,年级,性别和出生日期信息,保存到结构体数组中。2、 能根据输入的学号查询学生,进行信息的修改。3、 能根据输入的学号从结构体数组中删除学生的记录。4、 实现查询功能,能根据输入的学号或年级在屏幕上显示相应的学生信息。5、 能在屏幕上以列表的方式输出所有学生的信息。三、 概要设计1、 系统功能根据项目的开发要求,本系统划分成六个主要功能模块:录
2、入学生信息模块、修改学生信息模块、删除学生信息模块、查询学生信息模块、输出模块和推出模块。系统功能机构图如下: 学生档案管理系统删除学生信息修改学生信息查询学生信息系统输出学生信息退出系统录入学生信息按班级 查询按学号查询2、 重要数据的数据结构设计学生学籍的记录项用结构体Stu message表示,包括6个属性,stuno,name、spec、grade、sex、birthday分别代表学生的学号、专业、年级、性别和出生日期,其中birthday类型为自定义的结构体类型Date.Struct stumessageChar stuno11: /学号Char name9: /姓名Char spe
3、c2: /专业Char grade: /年级Char sex: /性别Stuct date birthday: /出生日期;日期类型 date包括三个属性,分别代表年、月、日。Struct dateint year : /年Int month: /月Int day: /日;3、 函数设计学籍管理系统程序采用了结构化程序设计的思想,由1个.h头文件和3个C源文件组成。程序中除了主函数外,共设计了以下14个函数,分别包含在3个.c源文件中。以下是这些函数原型及功能设计。(1) void sysinfo(void)函数功能:在屏幕上输入系统及版权信息并等待用户响应。(2) Void menuofma
4、in(struct stumessage stu);函数功能:在屏幕上显示主菜单,接收用户选择并响应用户相应操作。(3) Void append(struct stumessage stu);函数功能:录入一条学生记录数组的末尾。(4) void modify(struct stumessage stu)函数功能:通过输入学号查询学生相关信息,如果存在在屏幕上输出相应学生记录并通过重新输入学生信息的方法修改该学生的记录,否则输出没有找到相关记录。;(5) void Delet(struct stu Message stu) 函数功能:通过输入学号查询学生的相应记录信息,如果存在在屏幕上输出相应
5、学生记录,用户确认删除后用DelList()否则输出没有找到相关记录。(6) Void menuOfsear(struct stumessage stu);函数功能:在屏幕上显示查询了主菜单,接受用户选择并响应用户操作。(7) void listall(struct stumessage stu);函数功能:在屏幕上以列表的方式输出学生所有信息。调用printhead()输出表头,在调用listone()函数注意输出个条记录。(8) void quit(void);函数功能:退出菜单系统,并调用exit(0)系统函数结束程序运行。(9) void stear num(struct stumes
6、sage stu);函数功能:通过输入学号调用numofsear()函数查询学生的相应的记录信息,如果存在调用printhead()函数和listone()函数在屏幕上输出相应学生记录,否则输出没有找到相关记录。(10) voidsteargrade(stuct stumessage stu);函数功能:通过输入年级查询学生的相关记录信息,如果存在在屏幕以列表方式输出相应学生记录,并输出统计满足条件的学生个数,否则输出没有找到相关记录。(11) int numofsear(struct stumessage stu.char stunumber);函数功能:根据接收到的学生学号,在相应记录数组
7、中进行查询,如果存在相应记录,返加相应的数组下标,否则返回-1.(12) void printhead(void)函数功能:在屏幕上显示输出列表的表头。(13) void list one(struct stumessage list);函数功能:在屏幕上以行的形式显示输出一个学生的相关信息。(14) int dellist(struct stumessage stu, int i):函数功能:如果数组中存在下标为i的记录,删除该记录并返回1,否则返回0.4、 小组成员分工组员1Main():systeminfo();menuofmain();quit();组员2Printhead();lis
8、tone();listall(0;apend();组员3Modify();delte();dellist(0;menuofstear();seranum();seargrade();numofsear();四、 详细设计1、 系统主函数main()设计 输出系统及版权信息 Sysinfo() 开始 显示用户主菜单并响应 用户操作 Menuofmain() 结束2、 主菜单模块函数menuofmain()设计 清屏 清屏 开始 Choose!=0 choose退出系统输出学生信息修改学生信息删除学生信息查询学生信息录入学生信息非法操作 清屏显示主菜单接收用户选择 1 2 3 4 5 6 0 Y
9、N 3、 录入学生信息功能模块函数Append()设计 清屏 返回Con=Y或con=Y 接受用户选择 继续录入(Y/N) Length+ 录入一条记录 Y N4、修改学生信息功能模块函数modify()设计5、删除学生信息功能模块函数delete()设计继续删除(Y/N) Length-记录存在删除()Y/N 删除成功 输出第i条记录 输出表头没有找到相关记录查询该学生记录,用i指向它接收要删除的学号 清屏 Y N N Y Y 返回 N 6. 查询菜单模块函数menuofsear()设计 Choose!=0按年级查询非法操作返回主菜单按学号查询 choose 接收用户的选择- 显示查询菜单-
10、 清屏- 1 2 0 其他 Y N 7、 按学号查询功能模块函数searnum()设计Ilength且不 等于学号 清屏-接收查询学号- i=0 i+-没有找到相关记录- Choose!=0 输入表头- 输出第i条记录- 按任意键继续- Getch()-返回 N Y Y N8、 按年级查询功能模块函数steargrade()设计 Getch()- 输出表头- 接收查询年级- 清屏- i=0,count=0-Ilength 等于年级 输入第i条记录- Count+- i +- Choose!=0 共找到n条记录- 没有找到相关记录- 按任意键继续- 9、 输出学生信息功能模块函数ListALL(
11、)设计; 清屏- 输入表头- i=0 Ilength 输出第i条记录- i+- 按任意键继续- Getch()- 五 调试分析本系统在VC6下编译调试通过,可顺利运行,各项功能达到设计要求。本系统程序由一个.h头文件和三个.C源文件构成。系统调试主要在vc6下进行,采用分模块的方法进行编译,即完成一个函数功能模块就编译一个功能模块,最后再进行整体编译并产生可执行文件student.exe。在调试过程中,主要碰到了以下问题:1. 在清屏函数在Tc中使用的clrsc()函数,但在vc6中没有该函数也没有相应的函数。查资料,发现在vc中可使用system()函数调用系统实现。2. 在使用c语言系统函
12、数进行数据输入的时候,发现使用getchar(0和gets(0函数输入字符和字符串的时候,系统经常跳过相应的输入语句,无法输入数据。查资料,是c系统的输入处理,缓存问题,解决方法是在进行字符和字符串输入的时候,先使用fflush(stdin)函数清除缓存,既可正常输入字符和字符串。六、 用户手册本系统是win32控制台程序,可在window和dos环境下运行,执行文件名称:student.exe。运行程序后,首先显示系统消息和版权信息,用户按任意键后进行主要功能菜单,在主功能菜单中输入相应的数字可执行相应的程序功能,包括录入学生信息、修改学生信息,删除学生信息和输入所有学生信息,输入4可进行查
13、询子菜单,可进行按学号查询和按年级查询学生信息。在主功能菜单案6可结束本系统的运行并自动关闭运行窗口。七、 附录源程序文件名清单:Alist.h /公用的常量和类型Main.cList.cEdit.c源代码如下:#include#include#include struct dateint year;int month;int day;struct StuMessagechar stuNo11;char name10;char spec21;int greade;char sex10; struct date birthday;int length=0;struct StuMessage St
14、u100;int main()char c; int menuofmain(); int Append(struct StuMessage Stu100); int Modify(struct StuMessage Stu100); int Delete(struct StuMessage Stu100); void Menuofsear(struct StuMessage Stu100); void Listall(struct StuMessage Stu100); int listone(struct StuMessage Stu100,int i); system(color 5a);
15、 void SysInfo(void); printf(nnntttt江西农业大学学籍管理系统n); printf(nnn版本信息:nn); printf(ntc-free vision5.0nn); printf(nt2012-05-28tt); printf(nnttttttt班级:软件1115班nn); printf(ttttttt姓名:朱利斌nn); printf(ttttttt指导教师:邓泓nn); printf(nntttt enter进入学籍管理系统.n); c=getchar(); menuofmain();int menuofmain()int num;system(cls)
16、;system(color fc); int Append(struct StuMessage Stu100); int Modify(struct StuMessage Stu100); int Delete(struct StuMessage Stu100); void Menuofsear(struct StuMessage Stu100); void Listall(struct StuMessage Stu100); int listone(struct StuMessage Stu100,int i); printf(nnttt江西农业大学学生档案管理系统nnn); printf(
17、tttplease make a choicennn); printf(ttt录入学生信息,请选择1n); printf(ttt修改学生信息,请选择2n); printf(ttt删除学生信息,请选择3n); printf(ttt查询学生信息,请选择4n); printf(ttt输出学生信息,请选择5n); printf(ttt退 出 系 统,请选择6n); printf(nttttttttttttn); printf(ntt n); printf(请输入编号做出选择:n); scanf(%d, &num); switch(num) case 1:Append(Stu); break; case
18、 2:Modify(Stu); break; case 3:Delete(Stu); break; case 4:Menuofsear(Stu); break; case 5:Listall(Stu); break; case 6:exit (0); break; default:printf(非法操作n); break; int Append(struct StuMessage Stu100)system(cls);char c,ch;fflush(stdin);printf(输入第%d个学生的信息。n,length+1);printf(第%d个学生的信息n,length+1);printf
19、(please input stuNon);scanf(%s,Stu0.stuNo);printf(please input namen);scanf(%s,Stu0.name);printf(please input specn);scanf(%s,Stu0.spec);printf(please input greaden);scanf(%d,&Stu0.greade);printf(please input sexn);scanf(%s,Stu0.sex);printf(please input birthdayn);scanf(%d%d%d,&Stu0.birthday.year,&S
20、tu0.birthday.month,&Stu0.birthday.day);length+;while(1)c=getchar();printf(输入y或Y继续输入学生记录nn或N结束输入返回主菜单n);ch=getchar();if(ch=y|ch=Y)system(cls);fflush(stdin);printf(第%d个学生的信息n,length+1);printf(please input stuNon);scanf(%s,Stulength.stuNo);printf(please input namen);scanf(%s,Stulength.name);printf(plea
21、se input specn);scanf(%s,Stulength.spec);printf(please input greaden);scanf(%d,&Stulength.greade);printf(please input sexn);scanf(%s,Stulength.sex);printf(please input birthdayn);scanf(%d%d%d,&Stulength.birthday.year,&Stulength.birthday.month,&Stulength.birthday.day);length+; elseif(ch=n|ch=N)menuof
22、main();int Modify(struct StuMessage Stu) system(cls); int listone(struct StuMessage Stu,int i); char ch100,c; int i,j=-1; printf(输入学号进行修改.n); gets(ch); for(i=0;ilength;i+) if(strcmp(ch,Stui.stuNo)=0) j=i; listone(Stu,i); if(j=-1) printf(没有找到相关记录。n); Modify(Stu); printf(修改Y,y/N,n.n);fflush(stdin);c=g
23、etchar();if(c=Y|c=y)fflush(stdin);printf(please input stuNon);scanf(%s,Stuj.stuNo);printf(please input namen);scanf(%s,Stuj.name);printf(please input specn);scanf(%s,Stuj.spec);printf(please input greaden);scanf(%d,&Stuj.greade);printf(please input sexn);scanf(%s,Stuj.sex);printf(please input birthd
24、ayn);scanf(%d%d%d,&Stuj.birthday.year,&Stuj.birthday.month,&Stuj.birthday.day);elseif(c=N|c=n)menuofmain();printf(是否继续修改是输入y|Y否输入n|N。);c=getchar();if(c=y|c=Y)Modify(Stu);elseif(c=n|c=N)menuofmain();int Delete(struct StuMessage Stu)system(cls);int listone(struct StuMessage Stu,int i);char ch100,c; in
25、t i,j=-1; printf(输入学号进行删除.n); fflush(stdin); gets(ch); for(i=0;ilength;i+) if(strcmp(ch,Stui.stuNo)=0) j=i; listone(Stu,i); if(j=-1) printf(没有找到相关记录。n); Delete(Stu); printf(删除是Y|y否N|nn); fflush(stdin); c=getchar(); if(c=Y|c=y) for(j;jlength;j+) Stuj=Stuj+1; length-; else menuofmain(); printf(继续删除是y|
26、Y否n|N);fflush(stdin);c=getchar();if(c=y|c=Y)Delete(Stu);elseif(c=n|c=N)menuofmain();void Menuofsear(struct StuMessage Stu)system(cls); char c; char ch100; int a,i,j=0; int listone(struct StuMessage Stu,int i); printf(t输入02进行选择n); printf(按学号查询,请选择1n); printf(按年级查询,请选择2n); printf(返回主菜单,请选择0n); fflush(
27、stdin); c=getchar(); switch(c) case 1: fflush(stdin); printf(please input stuNon); scanf(%s,&ch); for(i=0;ilength;i+) if(strcmp(ch,Stui.stuNo)=0) j+; listone(Stu,i); if(j=0) printf(没有找到相关记录。n); Menuofsear(Stu); break; case 2: fflush(stdin); printf(please input greaden); scanf(%d,&a); for(i=0;ilength
28、;i+) if(a=Stui.greade) j+; listone(Stu,i); if(j=0) printf(没有找到相关记录。n); Menuofsear(Stu); break; case 0: menuofmain(); break; default: printf(非法操作); printf(继续查询y|Y返回主菜单n|Nn); fflush(stdin); c=getchar();if(c=y|c=Y)Menuofsear(Stu);elsemain();void Listall(struct StuMessage Stu) system(cls); int i; char c
29、; int listone(struct StuMessage Stu,int i); for(i=0;ilength;i+) fflush(stdin); listone(Stu,i); c=getchar(); menuofmain(); int listone(struct StuMessage Stu100,int i) fflush(stdin);printf(stuNo:%s,name:%s,spec:%s,greade:%d,sex:%s,birthday:%d %d %dn,Stui.stuNo,Stui.name,Stui.spec,Stui.greade,Stui.sex,Stui.birthday.year,Stui.birthday.month,Stui.birthday.day);专心-专注-专业