1、1系统的意义及其功能本系统为学生证管理程序.系统任务描述:假设某校学生学生证基本信息主要包括:学号、姓名、所在系、班级等,本系统应能对这些基本信息进行管理,并要求具有以下功能:(1)通过键盘输入某位学生的学生证信息。学生证包含的信息请参看自己的学生证;(2)给定学号,显示某位学生的学生证信息;(3)给定某个班级的班号,显示该班所有学生的学生证信息;(4)给定某位学生的学号,修改该学生的学生证信息;2系统的功能结构图以及调用关系学生证管理程序输入学号输入某班级的班号输入某位学生的学号按学号排序或姓名排序来显示该班所有学生证信息的学生证信息显示该生学生证信息修改该生的学生证信息键入某位学生的学生证
2、信息3系统功能详细分析学生证管理系统需要完成的功能主要有:从主函数进入各个子函数:子函数包括学生证信息的键入、查询信息的功能、修改学生证信息的功能、退出系统。具体功能如下:3.1学生证信息的键入学生证信息的键入此程序是将学生证信息录入文件开始主菜单学生证信息的键入输入学生证信息是否继续保存文件YN3。2 查询信息的功能查询记录的主要功能是通过不同的查询方式查询学生的信息。先是进入查询界面,再选择查询的方式,选择后将输出该学生的信息。共分为两种: 给定某个学生的学号,显示该学生的学生证信息; 给定某个班级的班号,按学号排序来显示该班所有学生的学生证信息; 按班级排序来显示该班所有学生的学生证信息
3、;3.2。1 输入学号,显示该生的学生证信息学生证信息查询此程序是通过输入某位学生的学号,显示该生的学生证信息。开始主菜单学生证信息查询输入学号显示该生的学生证信息关闭文件是否继续NY3。2。2 输入班号,显示该班所有学生的学生证信息学生证信息查询此程序是通过输入某班级的班号,然后选择按学号排序或班级排序,最后显示该班所有学生的学生证信息。开始主菜单学生证信息查询输入班号显示该班所有学生的学生证信息关闭文件是否继续NY按学号排序按班级排序3。3 修改学生证信息的功能修改信息功能修改信息的主要功能是通过输入某位学生的学号来修改该生的学生证信息。先是进入修改界面,再输入学号,输入后,将输出该生的学
4、生证信息,再选择是否修改此记录,选择是,则输入修改的信息,并保存修改。开始主菜单修改学生证信息功能输入学号显示该生学生证信息是否修改写入并保存文件YN4 运行界面主菜单界面学生证键入的界面个人学生证信息显示界面显示班级信息的选择输出方式的界面按学号排序显示该班所有学生的学生证信息界面按姓名排序显示该班所有学生的学生证信息界面显示班级信息的退出界面修改学生证信息的界面5系统使用说明1、进入程序时,先以菜单形式显示所有命令,然后用户通过菜单项选择操作;例如:1 学生证信息的键入2输入学号,显示该生学生证信息3 输入班号,显示该班所有学生的学生证信息4 给定学号,修改该生学生证信息5退出系统请选择1
5、/2/3/4/5:2、键入学生证信息时,按照所给定的格式输入。3、查询信息是按学生学号和班号的形式进行查询,填入学号后,则显示出该生所有信息;选择按班号查询功能后,在选择显示输出方式,分两种:一种按学号排序;另一种是按姓名排序。选定后,再填入班号,则显示出该班所有学生的学生证信息(按已选定的排序方式显示)。4、修改信息是按输入学号的形式进行修改,填入后,则显示出该生所有信息,然后询问是否修改,若回答“y”(大小写通用),则输入新值,否则不作修改。6 C语言源程序代码#include stdio。h#include windows.h /用来使用清屏函数include malloc.hinclu
6、de ); do c=getchar(); while(c!=1&c!=2&c!=3&c!=4&c!=5); getchar(); switch(c) case 1: head=creat(); break; case 2: viewperson(head); break; case 3: viewclass(head); break; case 4: change(head); break; case 5: exit(0); break; printf( 按任意键返回主菜单:n”); flushall(); getchar(); printf(”d,n); system(cls); whil
7、e(1);int n;struct STUcard *creat() /录入学生证信息函数struct STUcard head,p1,*p2;n=0;head=NULL;p1=p2=(struct STUcard *)malloc(LEN);printf(请按以下格式输入学生证信息,注意 每个数据之间间隔一个空格!n以学号为00000000结束录入,并且剩下的信息字符用“0”代替输入 注意:输入格式不变!:n);printf(”学号 姓名 性别 院系 班级 入学时间(年 月 日) 身份证号 出生日期(年 月 日)n); scanf(”d %s s s s d d d s d d %d,p1n
8、umber,p1-name,p1sex,p1department,p1-classnumber,p1-timeofenter。year,p1timeofenter.month,&p1timeofenter。day,p1-IDnumber,p1birthday.year,&p1birthday。month,&p1-birthday.day);while(p1-number!=00000000)n=n+1;if(n=1) head=p1;else p2next=p1;p2=p1;p1=(struct STUcard )malloc(LEN);scanf(”d s s s %s d d d %s %
9、d d d,p1number,p1-name,p1sex,p1department,p1-classnumber, p1timeofenter。year,p1timeofenter.month,&p1-timeofenter。day,p1IDnumber, &p1birthday.year,&p1birthday。month,p1birthday.day);p2-next=NULL;free(p1);save(head); /保存文件return(head); /把已录入信息的链表头指针返回给住函数void viewperson(struct STUcard head) /查找个人信息函数in
10、t m,a=0;struct STUcard p;printf(”请输入学号:”);printf(” n ”);scanf(d,&m);p=head; /获取头指针,以使用链表while(p-next!=NULL) /判断是否为空指针if(pnumber=m) printf(”学号:dn姓名:sn性别:sn院系:sn班级:sn入学时间:d年d月d日n身份证号:%sn出生日期:d年d月%d日n”, pnumber,pname,psex,pdepartment,p-classnumber, ptimeofenter。year,p-timeofenter。month,ptimeofenter。day
11、,p-IDnumber, pbirthday。year,pbirthday.month,p-birthday。day);printf(n”);a=a+1; p=pnext; /结点后移if(pnumber=m)printf(”学号:%dn姓名:sn性别:sn院系:sn班级:sn入学时间:d年d月d日n身份证号:sn出生日期:%d年%d月d日n”, pnumber,pname,psex,pdepartment,pclassnumber, ptimeofenter.year,ptimeofenter。month,ptimeofenter.day,pIDnumber, pbirthday。year,
12、pbirthday.month,p-birthday.day);printf(n”);a=a+1;printf(”n”);printf(”共%d人n”,a);if(a=0) printf( 对不起,查无此人!n”);void viewclass(struct STUcard head) /查找班级信息函数char c;void number();void name();do system(”cls”); /清屏 printf(*n”); printf(” 1: 按学号排序输出 n); printf(” 2: 按姓名排序输出 n”); printf(” 3: 退出 n”); printf(”*n
13、”); printf( n); printf(请选择输入选项123:); do c=getchar(); while(c!=1c!=2&c!=3); getchar(); switch(c) case 1: number(head); break; case 2: name(head); break; case 3: exit(0); continue; printf(” 按任意键返回上层菜单:n”); flushall(); getchar(); system(cls); while(1); void number(struct STUcard *head) /按学号排序 char c10;
14、 int h1,a=0,i,j,k,w; char hname20; char hsex20; char hdepartment20; char hclassnumber10; char hIDnumber30; struct date htimeofenter; struct date hbirthday; struct STUcard p,p2,p3; p=head; p2=head; p3=p2next; for(k=1;k+) /用来确定链表中共多少个结点 if(pnext!=NULL) p=pnext; else break; for(i=0;ik1;i+) p2=head; p3=
15、p2-next; for(j=0;jk-1i;j+) if(p2numberp3number) h1=p2number; strcpy(hname,p2name); strcpy(hsex,p2-sex); strcpy(hdepartment,p2-department); strcpy(hclassnumber,p2-classnumber); strcpy(hIDnumber,p2IDnumber); htimeofenter=p2-timeofenter; hbirthday=p2-birthday; p2-number=p3-number; strcpy(p2name,p3name)
16、; strcpy(p2-sex,p3-sex); strcpy(p2-department,p3department); strcpy(p2classnumber,p3classnumber); strcpy(p2IDnumber,p3IDnumber); p2timeofenter=p3-timeofenter; p2birthday=p3birthday; p3-number=h1; strcpy(p3name,hname); strcpy(p3-sex,hsex); strcpy(p3-department,hdepartment); strcpy(p3classnumber,hclas
17、snumber); strcpy(p3-IDnumber,hIDnumber); p3-timeofenter=htimeofenter; p3birthday=hbirthday; p2=p3; p3=p3next; printf(请输入班级:n”); scanf(”%s”,&c); p=head; for(w=1;wname,psex,p-department,pclassnumber, ptimeofenter。year,ptimeofenter。month,ptimeofenter。day,p-IDnumber, pbirthday。year,pbirthday。month,p-bir
18、thday。day);a=a+1; p=p-next; printf(”n”); printf(共d人n,a); if(a=0) printf(对不起 无此班级”); void name(struct STUcard head) /按姓名排序 char c10; int h1,a=0,i,j,k,w; char hname20; char hsex20; char hdepartment20; char hclassnumber10; char hIDnumber30; struct date htimeofenter; struct date hbirthday; struct STUcar
19、d *p,*p2,p3; p=head; p2=head; p3=p2next; for(k=1;k+) if(p-next!=NULL) p=pnext; else break; for(i=0;ik1;i+) p2=head; p3=p2next; for(j=0;j0) h1=p2number; strcpy(hname,p2-name); strcpy(hsex,p2sex); strcpy(hdepartment,p2department); strcpy(hclassnumber,p2classnumber); strcpy(hIDnumber,p2IDnumber); htime
20、ofenter=p2-timeofenter; hbirthday=p2birthday; p2number=p3number; strcpy(p2-name,p3-name); strcpy(p2sex,p3sex); strcpy(p2-department,p3department); strcpy(p2-classnumber,p3classnumber); strcpy(p2-IDnumber,p3IDnumber); p2timeofenter=p3timeofenter; p2birthday=p3-birthday; p3number=h1; strcpy(p3name,hna
21、me); strcpy(p3sex,hsex); strcpy(p3-department,hdepartment); strcpy(p3classnumber,hclassnumber); strcpy(p3IDnumber,hIDnumber); p3-timeofenter=htimeofenter; p3birthday=hbirthday; p2=p3; p3=p3-next; printf(”请输入班级:n”); scanf(”s”,c); p=head; for(w=1;wsex,pdepartment,pclassnumber, ptimeofenter。year,ptimeo
22、fenter.month,ptimeofenter。day,p-IDnumber, pbirthday。year,p-birthday。month,p-birthday.day);a=a+1; p=p-next; printf(n); printf(”共d人n,a); if(a=0) printf(”对不起 无此班级); void change(struct STUcard head) /修改信息int x; struct STUcard *p1,p2; printf(输入要修改学生的学号n); scanf(”%d”,x); p1=head; while(p1number!=x)&(p1nex
23、t!=NULL)) p2=p1; p1=p1next; if(p1-number=x) printf(”请输入需要修改的信息:n”); printf(”输入学号:);scanf(”d”,&p1-number);printf(”输入姓名:);scanf(%s”,p1name);printf(”输入性别:”);scanf(%s”,p1sex);printf(输入院系:”);scanf(”%s,p1-department);printf(输入班级:);scanf(”%s,p1classnumber); printf(”输入入学时间(年 月 日):”); scanf(%d d d”,&p1timeof
24、enter.year,p1timeofenter。month,p1-timeofenter。day);printf(输入身份证号:”); scanf(s”,p1IDnumber);printf(”输入出生日期(年 月 日):); scanf(”d d d,&p1birthday。year,&p1birthday。month,p1birthday.day); printf(”信息已修改”);save(head); else printf(”d 找不到该学号!n”,x);struct STUcard save(struct STUcard head) /_保存函数FILE fp;struct ST
25、Ucard *p;p=head;fp=fopen(”XX。out”,”w+”);if(fp=0)printf(”不能打开文件”); exit(0);while (p)fprintf(fp,”学号:dn姓名:sn性别:sn院系:sn班级:sn入学时间:d年d月d日n身份证号:sn出生日期:d年d月%d日n”, p-number,pname,p-sex,pdepartment,pclassnumber, ptimeofenter.year,ptimeofenter.month,ptimeofenter。day,pIDnumber, p-birthday。year,p-birthday.month,
26、p-birthday。day);printf(”n); p=pnext;printf(”n文件保存成功!n,n);fclose(fp);return head; /返回后结点7心得体会通过这次的C语言程序设计,让我意识到自己的基础还不是太扎实,发现自己在编程方面还有些不足,有一些小小的错误不能避免。这次的设计培养了我发现问题、解决问题的基本能力,也让自己的实际动手编程能力有一些提升,这对于我的学习有很大的帮助。将所学知识运用起来也是这次程序设计的成果,让我深深体会到了学以致用的乐趣,也让我对C语言的学习更加充满了信心。对于自己所展现出来的问题我将采取措施.多多打牢基础,对于一些简单的程序要手到
27、擒来,在往后的学习中能学以致用.8 实习日志2011年6月20日上午开始课程设计的第一天.目标就是参照老师给出的列子,将自己所要做的程序系统的主菜单写出来。设置主函数(void main()),先安置一个欢迎界面,再创作主菜单,由主函数调用其它子函数来实现程序功能。问题:学生证管理系统主菜单的建立,整个系统涉及到的函数;解决办法:使用switch( ) 条件选择菜单对应的函数,将系统的各个功能写成各个独立的函数,采用模块化编程。2011年6月21日下午上午主要任务是编写子函数.编写struct STUcard creat()函数来进行学生证信息的键入;而查询信息的函数又分为两个选项,分别为vi
28、ewperson( )函数按学号查询信息、viewclass( )函数按班号查询信息,其中按班号查询函数有两种选择显示的方式,一种是按学号排序的方式显示输出;另一种是按姓名排序的方式显示输出。查询信息时如果输入错误,则显示“查无此人”.2011年6月21日晚上下午的任务根据上午建立的查询学生学生证信息函数模板,建立学生证修改函数。修改为按学号查询修改.修改时,当选择修改并输入学号,将显示该学生信息,再判断是否修改。选择修改后将重新录入修改的信息。注意修改后等于覆盖原来的信息。2011年6月23日晚上为了不过分繁琐的录入信息,任务就是编写文件。将录入的信息存入文件中,关闭窗口后仍能在之后打开文件
29、使用开始录入的信息。编写函数来执行文件的读写。再对相应的信息显示函数改写文件形式。2011年6月24日上午对整个程序调试运行,并修改显示界面,尽可能使界面友好、直观、易操作.2011年6月27日下午设计word文档.2011年6月28日上午设计word文档。并完善程序及课程设计排版,使其更加美观。2011年6月29日上午答辩。2011年6月30日上午提交程序设计报告和源程序。参考文献1向艳 周天彤 程起才等编著C语言程序设计 北京:清华大学出版社 20082谭浩强 主编C语言程序设计 北京:清华大学出版社20003黄明 梁旭 万洪莉 编著C语言课程设计 北京:电子工业出版社2006第 15 页 共 16 页