c语言学生证管理系统设计_第1页
c语言学生证管理系统设计_第2页
c语言学生证管理系统设计_第3页
c语言学生证管理系统设计_第4页
c语言学生证管理系统设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

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<stdio.h> /输入输出函数 #include<stdlib.h> /常用函数库#include<string.h> /字符串函数#define n 1000 结构体:struct studentchar name10; /姓名,只能输入5个汉字char sex2; /性别,只能输入1个汉字int age; /年龄char department48; /所在院系char banji30; /班级char sno20; /学号stuinfon; /结构体数组,用作读取和存放临时数据2主函数main()preprintmenu(); /首页面print

9、menu(); /系统菜单selmenu(); /选择菜单3分块设计首页面void preprintmenu() /首页面 system("cls"); printf(" c语言课程设计 n");printf("n");printf(" 课设题目: 学生证管理程序n"); printf(" 学生班级: t1323-16班n");printf(" 学生姓名: 樊帅昌n"); printf(" 学生联系方式: 电话"); printf

10、(" 学生联系方式: qq:2026555785n");printf(" 完成日期: 2014年7月1日"); printf("n请按enter进入系统!n"); getchar(); system("cls"); /清屏函数设计目的:首页面显示学生设计的题目及学生的相关信息,用于教师知道学生应该完成题目,教师了解后,提示按enter键进入系统。系统菜单void printmenu() /使用菜单 system("cls");printf("*欢迎使用学生证管理系统*n");

11、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(&

12、quot; 请根据需要选择菜单选项(0-5)n");用户选择void selmenu() /选择菜单 int sel;char ch;while(1)printf("请输入菜单选项: ");scanf("%d",&sel);if(sel<0|sel>6) /对选择菜单进行判断printf("选择错误,请重新选择!n");continue;switch(sel)case 1: inputinfo();break; /添加模块case 2: showinfo();break; /从文件读入模块case 3:

13、quiry();break; /查询模块case 4: searchreplace();break; /修改模块case 5: searchdelate();break; /删除模块case 0: exit(0);if(sel=0) break; 添加模块首先要判断文件stuinfo.txt是否存在,如果存在就以读写(r+)的方式打开,如果不存在,就以写(w)的方式创建文件stuinfo.txt。输入格式要求:性别为男或女,学号为11位且不能重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。此外,如果以读写的方式打开,还要判断记录数num

14、<n是否成立,因为结构体数组的大小为n,当num=n时,表示已满,不能再存储数据,需要修改n的值。该模块具体流程如左图:代码:void inputinfo() /输入学生信息 int num; int i; int age; char sno20; /临时变量,用于验证输入的学号是否满足条件 char sex20; /临时变量,用于验证输入的性别是否满足条件 char banji20; /临时变量,用于验证输入的班级是否满足条件 int right; file *fp; if(fp=fopen("stuinfo.txt","r+")=null) /

15、以读写方式打开 if(fp=fopen("stuinfo.txt","w")=null) /文件不存在则创建文件 printf("n文件不存在且创建失败,返回!n"); printmenu(); printf("n请按照提示输入学生信息:nn"); printf("姓名:"); scanf("%s",&stui); do printf("n性别(男或女):"); scanf("%s",sex); if(strc

16、mp(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) /判断学号输入合法性 printf("输入错误,学号长度

17、应为11位数!n");right=1;getchar(); else right=0; while(right=1); strcpy(stuinfo0.sno,sno); do printf("n年龄:"); scanf("%d",&age); if(age<=1|age>25) printf("年龄应在15-25之间,请重新输入年龄!n");right=1;getchar(); else right=0; while(right=1); stuinfo0.age=age; do printf("

18、;n班号(7位):"); scanf("%s",banji); if(strlen(banji)!=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&quo

19、t;,stui,stuinfo0.sex,stuinfo0.sno,stuinfo0.age,stuinfo0.banji,stuinfo0.department); fclose(fp); printf("n保存成功!n"); /将输入信息保存至文件 printf("n请按enter键返回主菜单!n"); getchar(); getchar(); printmenu(); /返回菜单 for(i=0;!feof(fp);i+) fscanf(fp,"%s%s%s%d%s%s",&stui

20、,&stuinfoi.sex,&stuinfoi.sno,&stuinfoi.age,&stuinfoi.banji,&stuinfoi.department); /以读写方式输入 num=i; /记录数 if(num=n) printf("n保存记录数超出结构体数组数的大小,请先修改n的值n"); printmenu();注:判断记录数num<n是否成立,因为结构体数组的大小为n,当num=n时,表示已满,不能再存储数据,需要修改n的值。 printf("n请按照提示输入学生信息:nn"); printf(

21、"姓名:"); scanf("%s",&stui); 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

22、,sex); do printf("n学号(11位):"); scanf("%s",sno); if(strlen(sno)!=11) printf("输入错误,学号长度应为11位数!n");right=1;getchar(); else right=0; for(i=0;i<num;i+) if(strcmp(sno,stuinfoi.sno)=0) printf("该学号已经存在,请重新输入!n"); right=1; getchar(); while(right=1); strcpy(stuinfonu

23、m.sno,sno); do printf("n年龄:"); scanf("%d",&age); if(age<=15|age>25) 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(&

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

25、um.banji,stuinfonum.department); fclose(fp); printf("n保存成功!n"); /对文件进行保存 printf("n请按enter键返回主菜单!n"); getchar(); getchar(); printmenu();查询模块分为按照学号查询和按照班级查询两部分,可以通过菜单形式显示。1查询菜单void quiry() /查询 int chose; int right; do system("cls"); printf("nt1-按学号查询t2-某班学生信息t3-返回n&q

26、uot;); printf("n请输入数字选择:"); scanf("%d",&chose); if(chose<1|chose>3) right=1; getchar(); else right=0;while(right=1);switch(chose) case 1:searchshowinfo();break;case 2:searchshowallinfo();break;case 3:printmenu(); 2按照学号查询输入学号,并对学号进行查找,查找后显示出来。流程图:该部分代码:void searchshowinf

27、o()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",&stui,&stuinfoi.sex,&stuinfoi.sno,&stuinfoi.age,&stuinfoi.banji

28、,&stuinfoi.department); num=i; fclose(fp); printf("n请输入学生学号:"); scanf("%s",no); for(i=0;i<num;i+) if(strcmp(no,stuinfoi.sno)=0) 将输入学号与已存学号进行对比,查找出该学生 found=i; printf("n该学生的信息为:nn"); printf("姓名 性别 学号 年龄 班号 所在院系名n"); printf("%st%st%st%dt%stt%sn"

29、,stui,stuinfofound.sex,stuinfofound.sno,stuinfofound.age,stuinfofound.banji,stuinfofound.department); if(found<0) printf("n没有找到该学号的记录!n"); printf("n请按enter键返回主菜单!n"); getchar(); getchar(); quiry(); /调用该层菜单3按照班号查询将输入的班号与已存的班号进行对比,并将该班所有学生的学生证信息输出流程图如右:该部分代码:void se

30、archshowallinfo() int found= -1; int num; int i; char clano20; 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",&stui,&stuinfoi.sex,&stuinfoi.sno,&stuinf

31、oi.age,&stuinfoi.banji,&stuinfoi.department); num=i; fclose(fp); printf("n请输入班号:"); scanf("%s",clano); for(i=0;i<num;i+) if(strcmp(clano,stuinfoi.banji)=0) /查找该班级 found=i; printf("n该班级的学生信息为:nn"); printf("姓名 性别 学号 年龄 班号 所在院系名n"); printf("%st%st

32、%st%dt%st%sn",stui,stuinfofound.sex,stuinfofound.sno,stuinfofound.age,stuinfofound.banji,stuinfofound.department); if(found<0) /没有查找到该班级 printf("n没有找到该班号的记录!n"); printf("n请按enter键返回上级菜单!n"); getchar(); getchar(); quiry();修改模块先判断文件stuinfo.txt以读(r)的方式能否打开,不能就返回

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

34、用于验证输入的性别是否满足条件 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+) /读取文件 f

35、scanf(fpr,"%s%s%s%d%s%s",&stui,&stuinfoi.sex,&stuinfoi.sno,&stuinfoi.age,&stuinfoi.banji,&stuinfoi.department); num=i; fclose(fpr); printf("n请输入学号选择要修改的学生证:n"); scanf("%s",stuno); for(i=0;i<num;i+) if(strcmp(stuno,stuinfoi.sno)=0) fou

36、nd=i; printf("n你要修改的学生信息为:nn"); printf("姓名 性别 学号 年龄 班号 所在院系名n"); printf("%st%st%st%dt%st%sn",stui,stuinfoi.sex,stuinfoi.sno,stuinfoi.age,stuinfoi.banji,stuinfoi.department); printf("n请按照提示输入学生的新信息:n"); printf("姓名:"); scanf("%s",&am

37、p;stui); 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(stuinfofound.sex,sex); do printf("n学号(11位):"

38、); scanf("%s",sno); if(strlen(sno)!=11) printf("输入错误,学号长度应为11位数!n");right=1;getchar(); else right=0; for(i=0;i<num;i+) if(i!=found)&&(strcmp(sno,stuinfoi.sno)=0) /学号查重 printf("该学号已经存在,请重新输入!n"); right=1; getchar(); while(right=1); strcpy(stuinfofound.sno,sno)

39、; do printf("n年龄:"); scanf("%d",&age); if(age<=15|age>25) 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("输入错

40、误,班号长度应为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;i&

41、lt;num;i+) /保存文件 fprintf(fpw,"n%st%st%st%dt%st%s",stui,stuinfoi.sex,stuinfoi.sno,stuinfoi.age,stuinfoi.banji,stuinfoi.department); fclose(fpw); printf("n修改成功!n"); printf("n请按enter键返回主菜单!n"); getchar(); getchar(); printmenu(); if(found<0) /查找不到 printf("n

42、没有找到该学号的记录:n"); printf("n请按enter键返回主菜单!n"); getchar(); getchar(); printmenu(); 删除模块给定学号,先查找并显示出来,然后将这个学号对应的学生信息删除。代码:void searchdelate() /删除 int num; int i; int found=-1; char stuno20; file*fpr,*fpw; if(fpr=fopen("stuinfo.txt","r")=null) printf("文件打不开!n")

43、; printmenu(); for(i=0;!feof(fpr);i+) /读取文件 fscanf(fpr,"%s%s%s%d%s%s",&stui,&stuinfoi.sex,&stuinfoi.sno,&stuinfoi.age,&stuinfoi.banji,&stuinfoi.department); num=i; fclose(fpr); printf("n请输入学号选择你要删除的学生证信息:n"); scanf("%s",stuno); for(i=0;i

44、<num;i+) if(strcmp(stuno,stuinfoi.sno)=0) found=i; printf("n你删除的学生信息为:nn"); printf("姓名 性别 学号 年龄 班号 所在院系n"); printf("%st%st%st%dt%st%sn",stui,stuinfofound.sex,stuinfofound.sno,stuinfofound.age,stuinfofound.banji,stuinfofound.department); if(found<num-1

45、) for(found;found<num-1;found+) /删除该学生的信息 strcpy(stui,stuinfofound+1.name); strcpy(stuinfofound.sex,stuinfofound+1.sex); strcpy(stuinfofound.sno,stuinfofound+1.sno); stuinfofound.age=stuinfofound+1.age; strcpy(stuinfofound.banji,stuinfofound+1.banji); strcpy(stuinfofound.department,s

46、tuinfofound+1.department); if(fpw=fopen("stuinfo.txt","w")=null) printf("文件打不开!n"); printmenu(); for(i=0;i<num-1;i+) /保存文件 fprintf(fpw,"n%st%st%st%dt%st%s",stui,stuinfoi.sex,stuinfoi.sno,stuinfoi.age,stuinfoi.banji,stuinfoi.department); fclose(fpw)

47、; printf("n删除成功!n"); /提示删除成功 printf("n请按enter键返回主菜单!n"); getchar(); getchar(); printmenu(); if(found<0) printf("n没有找到该学号的记录:n"); printf("n请按enter键返回主菜单!n"); getchar(); getchar(); printmenu(); 四.测试分析主要内容:测试用例数据,测试结果,实际运行结果截图,测试中出现的问题、原因与分析。测试:第一部分:首页面第二部分:系统

48、菜单:第三部分:添加模块选择1,按照提示输入相应信息:测试中遇到的问题:第一次时提示后没有注意学号,姓名,性别等方面输入的合法性,后来注意到在源代码中修改,其次,再输入时学号的重复问题也有一点麻烦,在经过和同学讨论后解决了。第四部分:从文件中读入选择2,如图:测试中遇到的问题:首先,在窗口中显示的信息排列混乱,所以又不断的调试,原因是"n%st%st%st%dt%st%s"中对输出的细节没注意到。第五部分:查询模块:按照学号查询:按照班号查询:遇到问题:在代码中对查询的方法使用不熟练,曾用过链表方法,但是失败,后来又改用数组方法,多次修改后终于成功。原因:对c语言中的链表指针使用不熟练,理解掌握程度不够,有待提高。第六部分:修改模块:如图:修改后:第七部分:删除模块:如图:修改后的结果:已经把樊帅的信息删除。遇到的问题:在代码中不知道怎么编写代码才能把指定学生的信息删除掉,在上网查找相关资料,并在课本中查询有关数组的相关知识,最后实现了该功能。五.课程设计总结主要内容:设计

温馨提示

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

评论

0/150

提交评论