1、高级语言程序设计课程设计题 目: 学生证管理程序班 级: 学生学号: 学生姓名: 指导老师: 提交时间:华南农业大学 信息(软件)学院学生证管理程序1系统分析 1.1问题描述:设计一个学生证的管理程序。实现录入、修改、删除学生的学生证信息,并能根据输入的学生的学号,显示该学生的学生证信息或根据输入的班级的名称,显示该班所有学生的学生证信息,以及实现一些统计各类信息的功能。1.2系统功能分析: 学生证管理程序是用来进行学生证管理的应用软件,不属于学生可使用的系统,个人认为进入该系统不需要进行相应的身份登录。所以进入系统者应当可以使用所有功能; 使用者可行使基本功能有:录入某位学生的学生证信息;根
2、据给定学生的学号,修改、删除或显示该学生的学生证信息;根据输入的班级的编号,显示该班所有学生的学生证信息和一些统计功能。 另外,为了方便管理员操作,减少管理员重复工作的可能,另外加入额外功能:批量录入学生的学生证信息和班级删除。除此以外,亦另外添加操作台指令,方便管理员进行功能切换。1.3 开发平台及工具介绍:根据所学知识及所要用到的相关操作,采用C语言进行开发。开发平台:CodeBlocks+ MinGW + wxWidgets 2系统设计2.1 系统总体结构设计在对学生证管理程序进行系统功能分析之后,我对整个系统进行总体设计。首先,确定大致的开发和设计的思路,并在此基础上,用图表将系统总体
3、的设计架构勾画出来,制定模块结构图,通过模块功能分析对每一个模块进行总体设计。值得一提,总体的设计架构中,shell和kernel的设计应注意彼此的联系,这一方面设计的好坏对后面的设计有很大的影响。然后,根据总体设计的需求,确定要首先那些函数。 学生证管理程序可视作一个简易身份证管理系统,开发设计的方向是方便管理员的操作,节省管理员的操作时间。对于这个问题,可采用批量操作和指令操作的思路。可以将所有的学生证信息存储在一个文件(txt格式)中,在对大量学生证数据的处理用到链表和文件处理等基本技术,并用两个函数实现文件读取和写入。2.2 系统各个功能模块详细设计及功能模块之间关系设计(包括功能结构
4、图等)(1)添加模块(录入模块):可以逐个录入学生信息,也可以设定录入人数,批量录入学生信息。在输入学生信息时,可输入return返回,可随意输入指令进行功能切换。其功能图如下图.(2)搜索模块:根据给出信息,可以是学号,名字或班级,搜索符合条件的某位学生或某些学生,并返回地址。修改信息修改模块(3)修改模块:通过地址找到该学生信息,然后进行修改。 (4) 统计模块,统计学生总男女生人数;某班男生人数,女生人数;统计指定日子出生的学生;统计与指定名字相同的学生;(5) 显示模块,显示学生证信息。分为针对单人的详细显示和针对集体的行显示两种模式。(6)删除模块,本模块有2种删除方式,分别是按学号
5、删除和按班级名删除。 (7)指令模块,本模块负责辨认输入的为指令还是操作序号,并根据输入选择操作。 2.3 数据结构的设计(文件等)(1)学生证信息结构描述学生证信息,并作为一整条记录存放在文件中。typedef struct stud char name20; char sex8; char snumber14; char time12; char id20; char college24; char major20; char classes40; struct stud *next;LNode,*LinkList;LinkList p,q,m,n,c;(2) 链表存储学生证信息,并作为一
6、整条记录在程序中进行操作。 p=(LinkList)malloc(sizeof(LNode);/头指针 q=p;(3) 文件在程序开始前和结束后存储学生证信息void rewirte()/程序结束后将一切写进文件void load()/文件内容装载至链表2.4 界面设计遵循简洁美观、方便使用的原则。(1) 首页:用printf语句构造简单的界面,注重界面的简洁性。(2) 、录入界面(3) 、修改界面:(4) 删除界面(5)学号查询(6) 班级查询(7)其他(8) 指令(9) 统计班级男女人数(10) 统计同名(11) 统计同年同日出生流程图如下:3系统实现基于系统需求分析与系统总体设计的结果,
7、本系统采用开发平台:CodeBlocks+ MinGW + wxWidgets 实现各模块的功能,下面将展现某些模块的录入操作的详细设计和实现过程。录入模块:(1)(2) 代码段片段相关函数char console()/控制台录入:void entry()/录入 system(cls); char ,op,i=1; LinkList std; std=(LinkList)malloc(sizeof(LNode); std-next=NULL; printf(请分别输入学生的信息n); while(iname,cl);break; case 2:strcpy(std-sex,cl);break;
8、 case 3:strcpy(std-snumber,cl);break; case 4:strcpy(std-time,cl);break; case 5:strcpy(std-id,cl);break; case 6:strcpy(std-college,cl);break; case 7:strcpy(std-major,cl);break; case 8:strcpy(std-classes,cl);break; i+; q-next=std; q=q-next; q-next=NULL; printf(录入成功n); printf(输入任意键以退出n); a=getchar();4系
9、统测试模块测试:测试各模块的测试显示模块:(1)输出单个学生学生证信息。 1、输入学号 2、预期结果: 3、输出结果:4、结论:运行正常。(2) 显示班级学生证信息 1、输入2013软件工程1班 2、预期结果:3、4、结论:运行正常。系统测试:系统功能的完整测试(1)系统测试1:1、输入流程: 批量录入信息batchentry 输入3后输入信息 信息如下:根据学号输出信息,根据班级输出信息,2、预测结果:3、实际结果:4、结论:运行正常。5系统运行界面1、 运行界面1:统计同年同日生的学生2、 运行界面2:指令实现6总结 怎么说呢,这次设计的并不难,要是只完成基本功能的话其实不用什么力气。但在
10、这次设计中呢,却陆陆续续地遇到小问题。这些问题都得归因于自己整体设计时不够用心,未曾仔细地思考,又盲目地想做点新意,结果有一阵子一直停滞不前。结果,最后还是静下心来梳理了一遍思路,做好前期准备,情况才好起来。然后,感觉做这种课题真的非常好,题目分析、整体设计、模块分析.一整套做下来实在令人兴奋。Debug过程既是无聊的也是有趣的。能在程序设计中找到快乐实在不错。这次设计已经完结了,但是我的路还有很长,离成为一个合格的程序员实在还有很远,不过,还有几年时间可以抢救一下,我觉得我还有救的7参考文献C语言程序设计(第二版) 附录:全代码:#include#include#include#includ
11、e#include#define TRUE 1#define OK 1#define ERROR 0#define INFEASIBLE -1#define STACK_INIT_SIZE 100char need= ,ne=n;int k=0,sw=0;char cl80;typedef struct stud char name20; char sex8; char snumber14; char time12; char id20; char college24; char major20; char classes40; struct stud *next;LNode,*LinkLis
12、t;LinkList p,q,m,n,c;char console() int i=0; k=0; gets(cl); if(cl0=1&!cl1) return cl0; else while(cli) k=k+cli; i+; return 0;void shell() printf( 学生证管理系统 n); printf(=n); printf(1、学生证信息录入n); printf(2、学生证信息修改n); printf(3、学生证信息删除n); printf(4、显示学生的学生证信息n); printf(5、显示班级所有学生学生证信息n); printf(6、其他n); printf
13、(7、说明书n); printf(8、结束n); printf(=n); printf(请输入操作序号或正确指令n);void shell_II() /*system(cls);*/ printf(请选择你想修改的信息n); printf(1、姓名n); printf(2、性别n); printf(3、学号n); printf(4、入学时间n); printf(5、身份证号码n); printf(6、学院n); printf(7、专业n); printf(8、班级n); printf(9、返回n);void shell_III() printf( 请选择你想实现的统计功能n); printf(
14、1、统计某个班的男女人数n); printf(2、统计已录入学生之间的男女人数n); printf(3、统计并显示已录入学生中同名的学生n); printf(4、统计同年同日出生同学n); printf(5、批量录入n); printf(6、班级删除n);void rewirte()/罚抄 /程序结束后将一切写进文件 FILE *fp; fp=fopen(date.txt,w+); q=p; p=p-next; while(p) fputs(p-name,fp); fputc(need,fp); fputs(p-sex,fp); fputc(need,fp); fputs(p-snumber,
15、fp); fputc(need,fp); fputs(p-time,fp); fputc(need,fp); fputs(p-id,fp); fputc(need,fp); fputs(p-college,fp); fputc(need,fp); fputs(p-major,fp); fputc(need,fp); fputs(p-classes,fp); fputc(need,fp); fputc(ne,fp); q=p; p=p-next; free(q); void load() /文件内容装载至链表 FILE *fp; char ch,e80; LinkList one; int i=
16、1,l=0; fp=fopen(date.txt,a+); while(!feof(fp) i=1;l=0; one=(LinkList)malloc(sizeof(LNode); ch=fgetc(fp); if(feof(fp) break; while(ch!=ne) while(ch!= ) el+=ch; ch=fgetc(fp); ch=fgetc(fp); el=0; switch(i) case 1:strcpy(one-name,e);break; case 2:strcpy(one-sex,e);break; case 3:strcpy(one-snumber,e);bre
17、ak; case 4:strcpy(one-time,e);break; case 5:strcpy(one-id,e);break; case 6:strcpy(one-college,e);break; case 7:strcpy(one-major,e);break; case 8:strcpy(one-classes,e);break; default:break; l=0;i+; q-next=one; q=q-next; q-next=NULL; fclose(fp);void pri(LinkList l) printf(姓名:); puts(l-name); printf(n)
18、; printf(性别:); puts(l-sex); printf(n); printf(学号:); puts(l-snumber); printf(n); printf(入学时间:); puts(l-time); printf(n); printf(身份证号码:); puts(l-id); printf(n); printf(学院:); puts(l-college); printf(n); printf(专业:); puts(l-major); printf(n); printf(班级:); puts(l-classes); printf(n);void pri_II(LinkList
19、l) printf(%s %s %s %s %s %s %s %sn,l-name,l-sex,l-snumber,l-time,l-id,l-college,l-major,l-classes);void search()/根据学号找人 char op; op=console(); if(k=562|k=648|k=627|k=966|k=1164|k=1218|k=311|k=672|k=1189|k=735|k=840|k=839|k=836|k=1076|k=1161) sw=1;return; m=n=p-next; while(n) if(strcmp(cl,n-snumber)=
20、0) break; m=n;n=n-next; void search_II()/根据班级找人 system(cls); char op; int i=0; printf(请输入要查询的班级(如2013软件工程1班):n); op=console(); if(k=562|k=648|k=627|k=966|k=1164|k=1218|k=311|k=672|k=1189|k=735|k=840|k=839|k=836|k=1076|k=1161) sw=1;return; n=p-next; while(n) if(strcmp(cl,n-classes)=0) pri_II(n); i+;
21、n=n-next; if(i=0) printf(找不到要查询的班级n);void entry()/录入 system(cls); char ,op,i=1; LinkList std; std=(LinkList)malloc(sizeof(LNode); std-next=NULL; printf(请分别输入学生的信息n); while(iname,cl);break; case 2:strcpy(std-sex,cl);break; case 3:strcpy(std-snumber,cl);break; case 4:strcpy(std-time,cl);break; case 5:
22、strcpy(std-id,cl);break; case 6:strcpy(std-college,cl);break; case 7:strcpy(std-major,cl);break; case 8:strcpy(std-classes,cl);break; i+; q-next=std; q=q-next; q-next=NULL; printf(录入成功n); printf(输入任意键以退出n); a=getchar();void batchentry()/批量录入 system(cls); int i=0,num=0; char op; printf(请输入录入人数n); op=
23、console(); if(k=562|k=648|k=627|k=966|k=1164|k=1218|k=311|k=672|k=1189|k=735|k=840|k=839|k=836|k=1076|k=1161) sw=1;return; else while(cli) num+=cli-0; i+; i=1; while(inext;m=p; while(n) if(strcmp(cl,n-classes)=0) m-next=n-next; free(n); n=m-next; i+; else m=n;n=n-next; if(i=0) printf(找不到要查询的班级n);voi
24、d statistical_I()/统计某个班的男女人数 int i=0,boy=0,girl=0,sum=0; char op; printf(请输入你所要查询的班级n); op=console(); if(k=562|k=648|k=627|k=966|k=1164|k=1218|k=311|k=672|k=1189|k=735|k=840|k=839|k=836|k=1076|k=1161) sw=1; return; n=p-next; while(n) if(strcmp(cl,n-classes)=0) while(n-sexi) sum=sum+n-sexi; i+; i=0;
25、if(sum=-108) boy+; else if(sum=-141) girl+; sum=0;n=n-next; printf(男:%d 女:%dn,boy,girl);void statistical_II()/统计已录入学生之间的男女人数 int i=0,boy=0,girl=0,sum=0; n=p-next; while(n) while(n-sexi) sum=sum+n-sexi; i+; i=0; if(sum=-108) boy+; else girl+; sum=0;n=n-next; printf(男:%d 女:%dn,boy,girl);void statistic
26、al_III()/统计并显示已录入学生中同名的学生 char op; printf(请输入名字(如王小明)n); op=console(); if(k=562|k=648|k=627|k=966|k=1164|k=1218|k=311|k=672|k=1189|k=735|k=840|k=839|k=836|k=1076|k=1161) sw=1; return; n=p-next; while(n) if(strcmp(cl,n-name)=0) pri_II(n); n=n-next; void statistical_IV()/统计同年同日出生同学 int i=0,sum=0,deal=
27、0; char op; printf(请输入生日(如19940505)n); op=console(); if(k=562|k=648|k=627|k=966|k=1164|k=1218|k=311|k=672|k=1189|k=735|k=840|k=839|k=836|k=1076|k=1161) sw=1; return; n=p-next; while(n) while(iidi+6!=cli) deal=1;break; i+; if(deal=0) pri_II(n);sum+; n=n-next; deal=0;i=0; if(sum=0) printf(NOT FOUNDn);
28、void operation(char e)/其他 switch(e) case 1:statistical_I();break; case 2:statistical_II();break; case 3:statistical_III();break; case 4:statistical_IV();break; case 5:batchentry();break; case 6:classdelete();break; default:break; int main(void) FILE *fp; char op,sf,a,ch; int end=1; /*shell();*/ /*LinkList b;/链表头*/ p=(LinkList)malloc(sizeof(LNode); q=p; load(); x6:shell(); /*system(cls);*/ x8:while(end) she:op=console(); if(op=1) switch(op) case1: sw=0; x1:entry(); if(sw=1) sw=0;goto x7; break; case2: x2:sys
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922