C语言课程设计:学生证管理程序说明书正文_第1页
C语言课程设计:学生证管理程序说明书正文_第2页
C语言课程设计:学生证管理程序说明书正文_第3页
C语言课程设计:学生证管理程序说明书正文_第4页
C语言课程设计:学生证管理程序说明书正文_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、唐山学院课程设计1 1 需求分析在对学生证信息管理系统进行需求分析的过程中,需要确定系统的主要功能, 对软件开发的主要目的、软件的使用领域和有关该软件开发的软硬件环境进行详细的分析。下面从系统功能、运行环境、功能模块描述等几个方面进行需求分析。1.1 系统概述学生证管理系统是运行于windows系统下的应用软件, 主要用于对学生的学号、 姓名、性别、系别等信息进行录入、查询、删除、修改、统计等操作。1.2 功能需求学生证管理系统软件为学校的教师和学生提供了一个对学生证信息管理和查看的平台,给用户提供了一个简单友好的用户接口,功能需求如下:1.2.1 录入录入学生信息:用户根据提示输入学生的学号

2、、姓名、性别、系别等信息。1.2.2 查询查询学生信息:分为根据班级查询、根据姓名查询和根据学号查询三个具体需求,分别提示用户输入要查询学生信息的班级、姓名或学号,然后程序输出要查询的信息。1.2.3 删除删除学生信息: 提示用户输入要进行删除操作的学号,如果在文件中有该学生的信息存在,则将该学号所对应的姓名、学号等信息加以删除,如果没有该学生信息,则给出相应的提示。1.2.4 修改修改学生信息: 提示用户输入要进行修改操作的学号,如果在文件中有该学生的信息存在,则将提示用户输入该学号对应的学生学号、姓名、系别等需要修改的选项。该部分需求也需要提示用户选择是否继续进行修改操作。1.2.5 统计

3、统计学生信息: 提示用户选择要统计的项目, 然后程序对该项目进行统计并输出相应信息。唐山学院课程设计2 2 设计思路2.1 设计要求我的课程设计题目是学生证管理程序,具体要求为设计一个学生证管理程序。该程序具有下列功能:(1)录入某位学生的学生证信息(学生证应该包含的信息请参看自己的学生证);(2)给定学号,显示某位学生的学生证信息;(3)给定某个班级的班号,显示该班所有学生的学生证信息;(4)给定某位学生的学号,修改或删除该学生的学生证信息;(5)提供一些统计各类信息的功能。2.2 设计思路设计主函数显示一个主菜单,应用程序运行后, 先显示这个菜单,然后用户通过菜单项选择所希望进行的操作项目

4、。每一个操作项目即为一个子函数,通过用户选择的操作项目来调用相应的子函数,由对应的子函数来完成相应的操作功能。主函数功能图如图1 所示:由于链表结构较数组而言有诸多优点,所以本设计选择用结构体类型变量来储存每个学生的学生证信息,用链表结构来保存所有学生证的信息。主菜单1录入0退出2查询3修改4删除5统计图 1 主函数功能图唐山学院课程设计3 3 详细设计3.1 数据结构设计一个结构体, 该结构体包括学生证的详细信息:学号,姓名,性别,出生日期,入学日期,籍贯,系别,专业,班级等信息,更重要的还包括一个指向下一个结构体变量的指针以进行链接形成链表,从而方便地进行插入、删除、查询、统计等操作。本程

5、序设计的结构体如下:struct date int month; int day; int year; ; struct stud int num; char name25; char sex10; struct date birthday; struct date starttime; char addr20; char department25; char major25; char clas25; struct stud *next; ; 3.2 各函数的功能和实现3.2.1 主函数唐山学院课程设计4 主函数主要实现打印主目录并完成选择操作,从而调用相应的子函数完成相应的功能,而且主函数

6、能够鉴别用户的错误操作并给出相应提示。具体代码见附录。运行主界面如图 2 所示:图 2 主函数选择界面3.2.2 录入函数该函数主要实现开辟并向链表中插入新结点,然后输入相应的数据。 具体代码见附录。运行界面如图 3,图 4 所示:唐山学院课程设计5 图 3 录入函数界面图 4 录入函数界面3.2.3 查询函数该函数主要实现打印选择界面,并让用户选择相应的查询方式,然后由用户输入查询信息,程序实现对该。具体代码见附录。运行界面如图 5,图 6 所示:唐山学院课程设计6 图 5 查询函数选择界面图 6 查询函数运行界面3.2.4 修改函数该函数主要实现的功能是先让用户输入要修改的学生的学号,然后

7、让用户选择修改的项目,程序根据用户的选择进行相应项目的修改。具体代码见附录。运行界面如图 7,图 8 所示:唐山学院课程设计7 图 7 修改函数输入界面图 8 修改函数选择界面3.2.5 删除函数该函数主要实现功能为先让用户输入要删除的学生的学号,然后让用户确认操作,确认后删除该结点, 并使上一结点与下一结点链接以保证链表的完整性。具体代码见附录。唐山学院课程设计8 运行界面如图 9 所示:图 9 删除函数运行界面3.2.6 统计函数该函数主要实现让用户选择相应的统计项目,然后根据用户的选择进行相应的统计并打印统计结果。具体代码见附录。运行界面如图 10 所示:图 10 统计函数选择界面唐山学

8、院课程设计9 3.2.7 打印函数该函数实现对某一确定的学生信息进行打印。具体代码见附录。唐山学院课程设计10 4 总结经过一周的课程设计实践, 我完全自主完成了既定的任务,实现了所有要求的程序功能,这使我对 c语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的实际操作才能更好地学习它。通过课程设计这一实践环节, 加深了我对本学期所学知识的理解, 也提高了我运用所学知识分析问题和解决实际问题的能力。在此过程中我也发现自己好多不足之处, 首先是自己对 c语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,有时对 c语言中经常出现的错误也不了解,通过实践,使我在这几个方面

9、的认识有所提高。由于时间原因, 这次课程设计最大的遗憾是没有能够实现用文件进行保存数据,但是在接下来的时间里我要自学掌握它以充实自己。还有,通过这一周的实践学习,我不仅认识和体验了按照分析、设计、调试和测试的软件开发过程,更从中深刻认识到了“世上无难事,只要肯攀登”的道理。虽然自己在此过程中曾熬夜编写程序, 但是当最后自己用自己亲手编写的程序完成了既定的任务时,当看着程序一步步实现自己的想法时,心中成功的喜悦之情真是难于言表,我想这种成功的喜悦是无法被抄袭的,凭此不懈的精神奋斗, 还有什么困难能拦得住自己前进的步伐呢?唐山学院课程设计11 5 参考文献1 谭浩强 , 张温基 .c 语言程序设计

10、教程 . 高等教育出版社 .2006 年 12月第 3 版. 2 谭浩强 .c 程序设计(第三版) . 清华大学出版社 .2005 年 7 月第 3 版. 3 闫玉宝 , 徐守坤 . 数据结构 . 清华大学出版社 .2008 年 3 月第 1 版. 唐山学院课程设计12 附录源代码#include #include #include void input(struct stud *); void search(struct stud *); void modify(struct stud *); void del(struct stud *); void statistic(struct st

11、ud *); void print(struct stud *student); struct date int month; int day; int year; ; struct stud int num; char name25; char sex10; struct date birthday; struct date starttime; char addr20; char department25; char major25; char clas25; struct stud *next; ; static struct stud *head=null; /主函数int main(

12、void) int choice; do system(cls); /清屏printf(nt=学生证管理系统=n); printf(t-n); printf(t* *n); printf(t* 1-录入2-查询*n); 唐山学院课程设计13 printf(t* *n); printf(t* *n); printf(t* 3-修改4-删除*n); printf(t* *n); printf(t* *n); printf(t* 5-统计0-退出*n); printf(t* *n); printf(t-n); printf(tt请您在上述功能中选择(0-5):); scanf(%d,&cho

13、ice); while(choice5) /保证用户正确操作 printf(n 您的输入有误,请重新选择:); scanf(%d,&choice); switch (choice) /选择相应的功能 case 1:input(head);break; /调用录入函数case 2:search(head);break; /调用查询函数case 3:modify(head);break; /调用修改函数case 4:del(head);break; /调用删除函数case 5:statistic(head);break; /调用统计函数case 0:exit(0); while(1); /

14、无限循环,直到用户选择0 退出程序return 0; /录入函数void input(struct stud *p) struct stud *new=null,*this=null; new=(struct stud *)malloc(sizeof(struct stud); /开辟一个新结点的存储空间if(p=null) /将新结点链接到表尾 p=new; head=p; else this=p; while(this-next!=null) this=this-next; this-next=new; 唐山学院课程设计14 this=new; /输入新结点数据printf(nt=学生证管

15、理系统=n); printf(t*录入新信息 *n); printf( 请用英文输入新添加学生的信息:); printf(n 学号 :); scanf(%d,&(this-num); printf(n 姓名 :); scanf(%s,this-name); printf(n 性别 (male/female):); scanf(%s,this-sex); printf(n 出生年月 (月/日/年如 8/6/1986):); scanf(%d/%d/%d,&this-birthday.day,&this-birthday.month,&this-birthday.y

16、ear); printf(n 入学时间 (月/日/年如 9/1/2007):); scanf(%d/%d/%d,&this-starttime.day,&this-starttime.month,&this-starttime.year); printf(n 籍贯 :); scanf(%s,this-addr); printf(n 系别 :); scanf(%s,this-department); printf(n 专业 :); scanf(%s,this-major); printf(n 班级 :); scanf(%s,this-clas); this-next=nu

17、ll; print(this); /打印新结点信息printf(n 您已成功添加了一条新信息.); printf(n 按任意键返回主目录!); getchar(); getchar(); /查询函数void search(struct stud *head) int n; struct stud *this; /打印选择界面printf(nnt=学生证管理系统=); printf(nt*查询 *n); printf(t* *n); printf(t* 1- 按学号查询*n); printf(t* *n); printf(t* *n); printf(t* 2- 按姓名查询*n); printf

18、(t* *n); printf(t* *n); 唐山学院课程设计15 printf(t* 3- 按班级查询*n); printf(t* *n); printf(t*n); printf(tt 请您在上述功能中选择(1-3):); scanf(%d,&n); while(n3) /保证用户正确操作 printf(n 您的输入有误,请重新选择 :); scanf(%d,&n); switch(n) /选择相应的查询方式 case 1: /按学号查询this=head; int temp1; printf(n 请输入您要查询的学生的学号:); scanf(%d,&temp1)

19、; while(this!=null) if(temp1=this-num) break; this=this-next; if(this=null) printf(n 没有找到该学生!); else printf(nt 已找到该学生:); print(this); break; case 2: /按姓名查询this=head; char temp220; printf(n 请输入您要查询的学生的姓名:); scanf(%s,temp2); while(this!=null) if(strcmp(temp2,this-name)=0)break; this=this-next; if(this

20、=null) printf(n 没有找到该学生!); else 唐山学院课程设计16 printf(nt 已找到该学生:); print(this); break; case 3: /按班级查询this=head; char temp320;int i=0; printf(n 请输入您要查询的班级名称:); scanf(%s,temp3); if(this=null) printf(n 没有找到该班级学生的信息!); else while(this!=null) if(strcmp(temp3,this-clas)=0) print(this); i+; this=this-next; if(

21、i=0) printf(n 没有找到该班级学生的信息!); else printf(n*n); printf( 已找到 %d 个该班的学生,具体成员如上.,i); break; printf(n 按任意键返回主目录!); getchar(); getchar(); /修改函数void modify(struct stud *head) int m,n; struct stud *this=head; printf(n 请输入您要修改的学生的学号:); 唐山学院课程设计17 scanf(%d,&m); while(this!=null) /查找相应学号的学生 if(m=this-num)

22、 break; this=this-next; if(this=null) printf(n 没有找到该学生的信息!); else printf(n 已找到该学生.); print(this); /打印该学生的信息/打印修改项目printf(nt=学生证管理系统=); printf(nt*修改 *n); printf(t* *n); printf(t* 1-学号2-姓名*n); printf(t* *n); printf(t* 3-性别4-出生日期*n); printf(t* *n); printf(t* 5-入学日期6-籍贯*n); printf(t* *n); printf(t* 7-系别

23、8-专业*n); printf(t* *n); printf(t* 9-班级0-返回*n); printf(t* *n); printf(t*n); printf(tt请选择您要修改的项目:); scanf(%d,&n); while(n9) /保证用户正确操作 printf(n 您的输入有误,请重新选择 :); scanf(%d,&n); switch(n) case 1: printf(n 请输入修改后的学号:); scanf(%d,&this-num); break; case 2: printf(n 请输入修改后的姓名:); scanf(%s,this-name

24、); break; 唐山学院课程设计18 case 3: printf(n 请输入修改后的性别:); scanf(%s,this-sex); break; case 4: printf(n 请输入修改后的出生日期(月/日/年):); scanf(%d/%d/%d,&this-birthday.day,&this-birthday.month,&this-birthday.year); break; case 5: printf(n 请输入修改后的入学日期(月/日/年):); scanf(%d/%d/%d,&this-starttime.day,&this

25、-starttime.month,&this-starttime.year); break; case 6: printf(n 请输入修改后的籍贯:); scanf(%s,this-addr); break; case 7: printf(n 请输入修改后的系别:); scanf(%s,this-department); break; case 8: printf(n 请输入修改后的专业:); scanf(%s,this-major); break; case 9: printf(n 请输入修改后的班级:); scanf(%s,this-clas); break; printf( 已成

26、功修改该学生的信息.); printf(n 按任意键返回主目录!); getchar(); getchar(); /删除函数void del(struct stud *pp) int m;struct stud *p=pp,*this=pp;char choice; printf(n 请输入您要删除的学生的学号:); scanf(%d,&m); while(this!=null) /查找相应学号的学生 唐山学院课程设计19 if(m=this-num) break; p=this; this=this-next; if(this=null) printf(n 没有找到该学生的信息!);

27、 else printf(n 已找到该学生的信息:); print(this); printf(n 您确实要删除该学生的信息吗(y/n)?); /用户确认操作scanf(%c,&choice); while(choice!=y&choice!=y&choice!=n&choice!=n) printf(n 您的输入有误,请重新确认:); scanf(%c,&choice); if(choice=y|choice=y) /删除该学生对应的结点 if(p=this) head=this-next; free(this); else p-next=this-n

28、ext; free(this); printf(n 已成功删除该信息!); printf(n 按任意键返回主目录!); getchar(); getchar(); /统计函数void statistic(struct stud *p) int x,i; union /定义一个共用体变量 struct date a; 唐山学院课程设计20 char b25; temp; struct stud *this=null,*next=null; /打印统计项目菜单printf(nt=学生证管理系统=n); printf(nt*统计 *n); printf(t* *n); printf(t* 1-性别2

29、-出生日期*n); printf(t* *n); printf(t* 3-入学日期4-籍贯*n); printf(t* *n); printf(t* 5-系别6-专业*n); printf(t* *n); printf(t* 7-班级0-返回*n); printf(t* *n); printf(t*n); printf(tt 请选择您要统计的项目:); scanf(%d,&x); while(x7) /保证用户正确操作 printf(n 您的输入有误,请重新选择:); scanf(%d,&x); switch(x) /选择相应的统计项目 case 1: printf(n 请输入

30、您要统计的性别:); scanf(%s,&temp.b); this=next=p;i=0; while(next!=null) /打印并统计相应性别的人数 if(strcmp(next-sex,temp.b)=0) i+; print(next); next=next-next; printf(n*n); printf(n 性别为 %s 的学生共有 %d 人,具体成员如上 .,temp.b,i); break; case 2: printf(n 请您要输入统计的出生日期(月/日/年):); scanf(%d/%d/%d,&temp.a.month,&temp.a.da

31、y,&temp.a.year); this=next=p;i=0; 唐山学院课程设计21 while(next!=null) /打印并统计相应出生日期的人数 if(next-birthday.month=temp.a.month&next-birthday.day=temp.a.day& next-birthday.year=temp.a.year) i+; print(next); next=next-next; printf(n*n); printf(n出 生 日 期 为 %2.2d/%2.2d/%4.4d的 学 生 共 有 %d人 , 具 体 成 员 如上.,te

32、mp.a.month,temp.a.day,temp.a.year,i); break; case 3: printf(n 请您要输入统计的入学日期(月/日/年):); scanf(%d/%d/%d,&temp.a.month,&temp.a.day,&temp.a.year); this=next=p;i=0; while(next!=null) /打印并统计相应入学日期的人数 if(next-starttime.month=temp.a.month&next-starttime.day=temp.a.day& next-starttime.year=

33、temp.a.year) i+; print(next); next=next-next; printf(n*n); printf(n入 学 日 期 为 %2.2d/%2.2d/%4.4d的 学 生 共 有 %d人 , 具 体 成 员 如上.,temp.a.month,temp.a.day,temp.a.year,i); break; case 4: printf(n 请输入您要统计的籍贯:); scanf(%s,&temp.b); this=next=p;i=0; while(next!=null) /打印并统计相应籍贯的人数 if(strcmp(next-addr,temp.b)=

34、0) i+; print(next); next=next-next; 唐山学院课程设计22 printf(n*n); printf(n 籍贯为 %s 的学生共有 %d 人,具体成员如上 .,temp.b,i); break; case 5: printf(n 请输入您要统计的系别:); scanf(%s,&temp.b); this=next=p;i=0; while(next!=null) /打印并统计相应系别的人数 if(strcmp(next-department,temp.b)=0) i+; print(next); next=next-next; printf(n*n); pr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论