c语言学生证管理系统设计.doc

上传人:土8路 文档编号:10325987 上传时间:2021-05-09 格式:DOC 页数:41 大小:541.50KB
返回 下载 相关 举报
c语言学生证管理系统设计.doc_第1页
第1页 / 共41页
c语言学生证管理系统设计.doc_第2页
第2页 / 共41页
c语言学生证管理系统设计.doc_第3页
第3页 / 共41页
c语言学生证管理系统设计.doc_第4页
第4页 / 共41页
c语言学生证管理系统设计.doc_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《c语言学生证管理系统设计.doc》由会员分享,可在线阅读,更多相关《c语言学生证管理系统设计.doc(41页珍藏版)》请在三一文库上搜索。

1、HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言程序设计报告学 院: 电气与信息工程学院 专 业: 电子信息产业题 目: 学 生 证 管 理 系 统 班 号: T-132316 姓 名: 樊帅昌 学 号: 20130231611 指导教师: 吴年志 2014年7月2日目录C语言程序设计报告1一.课程设计目的3二设计要求3三具体模块分析51头文件及定义结构体5头文件:5结构体:52主函数63分块设计6首页面6系统菜单6用户选择7添加模块8查询模块12修改模块15删除模块19四.测试分析21五.课程设计总结26六.程序源代码27一. 课程设计目的1巩固和加深

2、学生对C语言程序设计课程基本知识的理解和掌握。2掌握C语言编程和程序调试的基本技能。3掌握书写程序设计说明文档的能力。4提高学生分析问题和解决问题的能力,培养严谨的工作作风和良好的程序设计习惯,为后续课程的学习打下良好的基础。二设计要求题目:学生证管理程序题目描述:请设计一个学生证管理的程序,以方便辅导员对学生证的管理,该程序应该具有以下功能:(1)能从键盘输入某位学生的学生证信息(学生证应该包含的信息可以参考自己的学生证)。(2)给定学号,显示该学生的学生证信息。(3)给定班号,显示该班所有学生的学生证信息。(4)给定学号,修改该学生的学生证信息。(5)给定学号,删除该学生的学生证信息。题目

3、要求:(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。(2)学生证应该包含的信息参考自己的学生证。(3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。输入要求: (1)应用程序运行后在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。程序根据用户输入的信息完成相应的处理,实现要求的功能。 (2)能对输入的数据进行简单的校验,例如,学生的入学时间必须是一个合法的日期格式,学号是唯一的(一个学号对应一条学生证信息)。输出要求: (1)应用程序运行后,要在屏

4、幕上显示一个菜单。 (2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式以及结束方式等。(3)在程序完成处理后,要清楚地给出程序的处理结果。例如,在给定学号删除学生证信息时,如果该学生不存在,要提示没能删除,如果删除成功要提示删除成功。实现要求: (1)在程序中使用链表存储学生证信息。 (2)采用模块化程序设计的方法,将程序中的各项功能用函数实现。提示: (1)使用结构体表示学生证信息,一个结点保存一条学生证信息。 扩展功能: (1)学生证信息从文件读入。 (2)将学生证信息保存到文件中。(一)基本要求1掌握C 语言程序设计的方法,熟悉使用VC6.0作为开发软件开发C语

5、言程序及C 程序的调试过程。2熟悉C 语言中的数据类型,数据结构、语句结构、运算方法、函数,巩固和加深对理论课中知识的理解,提高基本编程能力。3综合编程题,每组完成一个课题(一组不能超过2人),每组成员必须明确各自的任务。4要求利用结构化程序设计方法以及C的编程思想来完成题目问题描述中所要求的设计任务,功能模块化,设计内容符合题目要求;5概要设计模块划分合理,清晰,系统结构图符合功能操作要求;6详细设计,主要功能模块有较完善的程序流程图,每个主要功能模块有较完善的入口、功能、出口等的清晰的描述,说明符合结构化程序设计要求;7每个模块的程序代码,具有较好的可读性和可靠性;程序书写风格:锯齿型书写

6、格式,并有详尽的注释。8用户界面要求尽可能友好,提示信息充分、完整;对输入内容有较完善的判误处理并方便操作;9程序必须上机调试通过,不应出现语法型、功能型错误,并获得满意的结果;10所设计的程序,必须在提交验收前,通过测试用例做必要的功能测试,尽可能避免原则性错误的出现。(二)设计步骤在进行综合编程时需要遵循以下的步骤:1问题分析、确定解决方案框架,充分地分析和理解问题本身,弄清要求做什么。在确定解决方案框架过程中,仔细考虑如何使用数据,数据结构有哪些?程序结构清晰、合理、简单和易于调试,并确定每个模块的简单功能,以及模块之间的调用关系。2详细设计和编码:确定程序的主要流程,在此基础上进行代码

7、设计,每个功能模块程序一般不超过60行,否则要进一步划分。3上机前编写程序与检查。4上机调试程序。5每个功能在输入值集范围内,确定好几组测试用例数据,通过尽可能详尽的测试用例,找出程序中存在的或有可能出现的功能错误。(三)综合报告要求课程设计报告要求内容:1系统设计分析预览:(1)系统功能模块划分:根据需求分析,可以把这个系统的设计分为学生信息预览、管理系统、添加、从文件读入、查询、修改、删除、退出系统七大模块,其中查询模块可以分为两个子模块,系统功能模块图如下所示:学生信息预览学生证管理系统退出删除修改查询读入添加按照班级查询按照学号查询三具体模块分析1头文件及定义结构体头文件:#inclu

8、de /输入输出函数 #include /常用函数库#include /字符串函数#define N 1000 结构体:struct Studentchar name10; /姓名,只能输入5个汉字char sex2; /性别,只能输入1个汉字int age; /年龄char department48; /所在院系char banji30; /班级char sno20; /学号StuInfoN; /结构体数组,用作读取和存放临时数据2主函数main()preprintmenu(); /首页面printmenu(); /系统菜单selmenu(); /选择菜单3分块设计首页面void prepr

9、intmenu() /首页面 system(cls); printf( c语言课程设计 n);printf(n);printf( 课设题目: 学生证管理程序n); printf( 学生班级: T1323-16班n);printf( 学生姓名: 樊帅昌n); printf( 学生联系方式: 电话:18372628029n); printf( 学生联系方式: qq:2026555785n);printf( 完成日期: 2014年7月1日); printf(n请按enter进入系统!n); getchar(); system(cls); /清屏函数设计目的:首页面显示学生设计的题目及学生的相关信息,

10、用于教师知道学生应该完成题目,教师了解后,提示按enter键进入系统。系统菜单void printmenu() /使用菜单 system(cls);printf(*欢迎使用学生证管理系统*n);printf(n);printf( 1. 添加学生的学生证信息n );printf( 2. 从文件读入学生的学生证信息n);printf( 3. 查询学生的学生证信息n);printf( 4. 给定学号修改该学生的学生证信息n);printf( 5. 给定学号删除该学生的学生证信息n);printf( 0. 退出系统n); printf(n);printf(*n);printf( 请根据需要选择菜单选项

11、(0-5)n);用户选择void selmenu() /选择菜单 int sel;char ch;while(1)printf(请输入菜单选项: );scanf(%d,&sel);if(sel6) /对选择菜单进行判断printf(选择错误,请重新选择!n);continue;switch(sel)case 1: inputinfo();break; /添加模块case 2: showinfo();break; /从文件读入模块case 3: quiry();break; /查询模块case 4: searchreplace();break; /修改模块case 5: searchdelate

12、();break; /删除模块case 0: exit(0);if(sel=0) break; 添加模块首先要判断文件StuInfo.txt是否存在,如果存在就以读写(r+)的方式打开,如果不存在,就以写(w)的方式创建文件StuInfo.txt。输入格式要求:性别为男或女,学号为11位且不能重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。此外,如果以读写的方式打开,还要判断记录数numN是否成立,因为结构体数组的大小为N,当num=N时,表示已满,不能再存储数据,需要修改N的值。该模块具体流程如左图:代码:void inputinfo

13、() /输入学生信息 int num; int i; int age; char sno20; /临时变量,用于验证输入的学号是否满足条件 char sex20; /临时变量,用于验证输入的性别是否满足条件 char banji20; /临时变量,用于验证输入的班级是否满足条件 int right; FILE *fp; if(fp=fopen(StuInfo.txt,r+)=NULL) /以读写方式打开 if(fp=fopen(StuInfo.txt,w)=NULL) /文件不存在则创建文件 printf(n文件不存在且创建失败,返回!n); printmenu(); printf(n请按照提

14、示输入学生信息:nn); printf(姓名:); scanf(%s,&StuInfo0.name); do printf(n性别(男或女):); scanf(%s,sex); if(strcmp(sex,男)!=0)&(strcmp(sex,女)!=0) printf(输入错误,请输入男或女!n); /判断性别输入合法性right=1;getchar(); else right=0; while(right=1); strcpy(StuInfo0.sex,sex); do printf(n学号(11位):); scanf(%s,sno); if(strlen(sno)!=11) /判断学号输

15、入合法性 printf(输入错误,学号长度应为11位数!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfo0.sno,sno); do printf(n年龄:); scanf(%d,&age); if(age25) printf(年龄应在15-25之间,请重新输入年龄!n);right=1;getchar(); else right=0; while(right=1); StuInfo0.age=age; do printf(n班号(7位):); scanf(%s,banji); if(strlen(banji)

16、!=7) printf(输入错误,班号长度应为7位数!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfo0.banji,banji); printf(n所在院系名:); scanf(%s,&StuInfo0.department); fprintf(fp,n%st%st%st%dt%st%s,StuInfo0.name,StuInfo0.sex,StuInfo0.sno,StuInfo0.age,StuInfo0.banji,StuInfo0.department); fclose(fp); printf(n保存

17、成功!n); /将输入信息保存至文件 printf(n请按enter键返回主菜单!n); getchar(); getchar(); printmenu(); /返回菜单 for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%d%s%s,&StuInfoi.name,&StuInfoi.sex,&StuInfoi.sno,&StuInfoi.age,&StuInfoi.banji,&StuInfoi.department); /以读写方式输入 num=i; /记录数 if(num=N) printf(n保存记录数超出结构体数组数的大小,请先修改N的值n); printm

18、enu();注:判断记录数numN是否成立,因为结构体数组的大小为N,当num=N时,表示已满,不能再存储数据,需要修改N的值。 printf(n请按照提示输入学生信息:nn); printf(姓名:); scanf(%s,&StuInfonum.name); do printf(n性别(男或女):); scanf(%s,sex); if(strcmp(sex,男)!=0)&(strcmp(sex,女)!=0) printf(输入错误,请输入男或女!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfonum.sex

19、,sex); do printf(n学号(11位):); scanf(%s,sno); if(strlen(sno)!=11) printf(输入错误,学号长度应为11位数!n);right=1;getchar(); else right=0; for(i=0;inum;i+) if(strcmp(sno,StuInfoi.sno)=0) printf(该学号已经存在,请重新输入!n); right=1; getchar(); while(right=1); strcpy(StuInfonum.sno,sno); do printf(n年龄:); scanf(%d,&age); if(age2

20、5) printf(年龄应在15-25之间,请重新输入年龄!n);right=1;getchar(); else right=0; while(right=1); StuInfonum.age=age; do printf(n班号(7位):); scanf(%s,banji); if(strlen(banji)!=7) printf(输入错误,班号长度应为7位数!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfonum.banji,banji); printf(n所在院系名:); scanf(%s,&StuInf

21、onum.department); fprintf(fp,n%st%st%st%dt%st%s,StuInfonum.name,StuInfonum.sex,StuInfonum.sno,StuInfonum.age,StuInfonum.banji,StuInfonum.department); fclose(fp); printf(n保存成功!n); /对文件进行保存 printf(n请按enter键返回主菜单!n); getchar(); getchar(); printmenu();查询模块分为按照学号查询和按照班级查询两部分,可以通过菜单形式显示。1查询菜单void quiry()

22、/查询 int chose; int right; do system(cls); printf(nt1-按学号查询t2-某班学生信息t3-返回n); printf(n请输入数字选择:); scanf(%d,&chose); if(chose3) right=1; getchar(); else right=0;while(right=1);switch(chose) case 1:searchshowinfo();break;case 2:searchshowallinfo();break;case 3:printmenu(); 2按照学号查询输入学号,并对学号进行查找,查找后显示出来。流程

23、图:该部分代码:void searchshowinfo()int found=-1;int num,i;char no20;FILE *fp; if(fp=fopen(StuInfo.txt,r)=NULL) printf(文件打不开!n); printmenu(); for(i=0;!feof(fp);i+) /读取文件 fscanf(fp,%s%s%s%d%s%s,&StuInfoi.name,&StuInfoi.sex,&StuInfoi.sno,&StuInfoi.age,&StuInfoi.banji,&StuInfoi.department); num=i; fclose(fp);

24、 printf(n请输入学生学号:); scanf(%s,no); for(i=0;inum;i+) if(strcmp(no,StuInfoi.sno)=0) 将输入学号与已存学号进行对比,查找出该学生 found=i; printf(n该学生的信息为:nn); printf(姓名 性别 学号 年龄 班号 所在院系名n); printf(%st%st%st%dt%stt%sn,StuInfofound.name,StuInfofound.sex,StuInfofound.sno,StuInfofound.age,StuInfofound.banji,StuInfofound.departme

25、nt); if(found0) printf(n没有找到该学号的记录!n); printf(n请按enter键返回主菜单!n); getchar(); getchar(); quiry(); /调用该层菜单3按照班号查询将输入的班号与已存的班号进行对比,并将该班所有学生的学生证信息输出流程图如右:该部分代码:void searchshowallinfo() int found= -1; int num; int i; char ClaNO20; FILE*fp; if(fp=fopen(StuInfo.txt,r)=NULL) printf(文件打不开!n); printmenu(); for

26、(i=0;!feof(fp);i+) /读取文件 fscanf(fp,%s%s%s%d%s%s,&StuInfoi.name,&StuInfoi.sex,&StuInfoi.sno,&StuInfoi.age,&StuInfoi.banji,&StuInfoi.department); num=i; fclose(fp); printf(n请输入班号:); scanf(%s,ClaNO); for(i=0;inum;i+) if(strcmp(ClaNO,StuInfoi.banji)=0) /查找该班级 found=i; printf(n该班级的学生信息为:nn); printf(姓名 性别

27、 学号 年龄 班号 所在院系名n); printf(%st%st%st%dt%st%sn,StuInfofound.name,StuInfofound.sex,StuInfofound.sno,StuInfofound.age,StuInfofound.banji,StuInfofound.department); if(found0) /没有查找到该班级 printf(n没有找到该班号的记录!n); printf(n请按enter键返回上级菜单!n); getchar(); getchar(); quiry();修改模块先判断文件StuInfo.txt以读(r)的方式能否打开,不能就返回,可

28、以就读入记录;然后输入学号查找记录,没找到就返回,找到就按照提示修改该记录,与输入模块一样,输入的格式要求:性别为男或女,学号为11位且不能与除当前修改的记录的学号外的记录的学号重复,年龄在15到25之间,班级号为7位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。输入完成后,再以写(w)的方式创建文件,不能创建就返回,可以就将结构体数组中的所有记录保存到文件中,这与添加稍有差别,最后返回主菜单。流程图如下代码部分:void searchreplace() /修改 int num; int i; int right; int age; char sex20; /临时变量,用于

29、验证输入的性别是否满足条件 char banji20; /临时变量,用于验证输入的班级是否满足条件 char sno20; /临时变量,用于验证输入的学号是否满足条件 char department30; /临时变量,用于验证输入的院系是否满足条件 int found=-1; char StuNO20; FILE*fpr,*fpw; if(fpr=fopen(StuInfo.txt,r)=NULL) printf(文件打不开!n); printmenu(); for(i=0;!feof(fpr);i+) /读取文件 fscanf(fpr,%s%s%s%d%s%s,&StuInfoi.name,

30、&StuInfoi.sex,&StuInfoi.sno,&StuInfoi.age,&StuInfoi.banji,&StuInfoi.department); num=i; fclose(fpr); printf(n请输入学号选择要修改的学生证:n); scanf(%s,StuNO); for(i=0;inum;i+) if(strcmp(StuNO,StuInfoi.sno)=0) found=i; printf(n你要修改的学生信息为:nn); printf(姓名 性别 学号 年龄 班号 所在院系名n); printf(%st%st%st%dt%st%sn,StuInfoi.name,S

31、tuInfoi.sex,StuInfoi.sno,StuInfoi.age,StuInfoi.banji,StuInfoi.department); printf(n请按照提示输入学生的新信息:n); printf(姓名:); scanf(%s,&StuInfofound.name); do printf(n性别(男或女):); scanf(%s,sex); if(strcmp(sex,男)!=0)&(strcmp(sex,女)!=0) printf(输入错误,请输入男或女!n);right=1;getchar(); else right=0; while(right=1); strcpy(S

32、tuInfofound.sex,sex); do printf(n学号(11位):); scanf(%s,sno); if(strlen(sno)!=11) printf(输入错误,学号长度应为11位数!n);right=1;getchar(); else right=0; for(i=0;inum;i+) if(i!=found)&(strcmp(sno,StuInfoi.sno)=0) /学号查重 printf(该学号已经存在,请重新输入!n); right=1; getchar(); while(right=1); strcpy(StuInfofound.sno,sno); do pri

33、ntf(n年龄:); scanf(%d,&age); if(age25) printf(年龄应在15-25之间,请重新输入年龄!n);right=1;getchar(); else right=0; while(right=1); StuInfofound.age=age; do printf(n班号(7位):); scanf(%s,banji); if(strlen(banji)!=7) printf(输入错误,班号长度应为7位数!n);right=1;getchar(); else right=0; while(right=1); strcpy(StuInfofound.banji,banji); printf(n所在院系名:); scanf(%s,&StuInfofound.department); if(fpw=fopen(StuInfo.txt,w)=NULL) printf(文件打不开,保存失败!n); printmenu(); for(i=0;inum;i+) /保存文件 fprintf(fpw,n%st%st%st%dt%st%s,StuInfoi.name,StuInfo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1