1、学生证管理系统课程设计报告C语言课程设计实验报告课程设计题目:学生证管理系统姓名:学号:班级:专业:指导教师:2014年 1 月 2 日学生证管理系统课程设计报告1。需求分析。根据学生证管理的需要,建一个“学生证管理系统”,以方便对学生证信息的各项管理操作。要求完成:1.能对学生证信息进行录入和修改2.能按照学号和班级号显示学生证信息和更改、删除信息。2。总体设计.根据以上分析,本系统主要包括:从键盘输入学生证信息、从指定的文件中读入学生证信息、按照学号和班号查询学生证信息、删除和修改学生证信息.(1) 主函数main():定义学生结构体数组,输出操作对话框,调用录入、查询、删除、输出等函数对
2、学生证信息进行处理。(2) 录入函数enter():从键盘输入学生证信息。(3) 录入函数load():从文件输入学生证信息.(4) 查询函数search():按学号查找记录信息。(5) 查询函数display():按班级查找记录信息.(6) 删除函数del():删除指定学号的学生记录.(7) 修改函数modify():按照指定学号修改记录。学生证管理系统程序功能机构图如下:学号查询班级查询键盘输入文件输入修改记录删除记录3。详细设计.本功能一共有16个函数,其中一个主函数,15个功能模块,每个功能模块都是由于主函数或其他功能模块调用,分别说明如下:1.主函数main().输入操作s输入菜单开
3、始键盘输入文件输入删除记录修改记录班级查询学号查询继续操作否结束YN图1。2 主程序流程图(2)键盘输入函数.键盘输入函数主要完成学生信息从屏幕输入数据,并将数据保存到文本文件中,以备后用.开始流程图:输入学生信息是否继续结束YN(3)文件输入函数。文件输入函数主要完成学生信息从文件中读入数据.开始打开文件结束关闭文件是否继续读入学生证信息YN图1.4文件输入流程图(4)学号查询函数.学号查询函数是完成由用户输入需要查询的学号,在现有学生信息中查询是否有此学生信息存在,查到输出学生全部信息,没查到则输出“此学生部存在”信息。流程图如下:开始打开文件读入学生证信息输入查到学生信息结束关闭文件输出
4、学生不存在信息查到否输入查询学号YN图1.5 学号查询流程图(5)班级查询函数。输出查到学生信息结束关闭文件输出此班级学生不存在信息查到否?输入查询班号读入学生信息打开文件开始班级查询函数是完成由用户输入需要查询的班级,在现有学生信息中查询此班级的全部学生信息,查到输出全部信息,没差到则输出“此班级学生不存在”信息.YN(6)学号删除函数。学号删除函数是完成由用户输入需要删除的学号,在现有学生信息中查询是否有该学生信息存在,查到则删除此学生全部信息,没查到则输出“此学生不存在信息。程序流程图如下:开始打开文件读入学生信息输入删除学号找到否?输入此学生不存在信息关闭文件结束删除此学生信息YN(7
5、)修改函数。修改函数主要是完成根据学号查找到学生信息,输出学生信息,然后修改学生信息。修改此学生信息结束关闭文件输出此学生不存在信息找到否?输入修改学号读入学生学号打开文件开始程序流程如下:YN图1。7 学号修改流程图4测试结果。(1)程序运行主菜单 1.9 主菜单界面(2)从文件输入并显示结果(3)按学号查找。(4)修改测试.(5)按班号浏览。(6) 统计班级的人数。(7)删除功能测试.5。软件操作使用说明书.本软件采用命令行对话方式进行操作,运行后出现主界面如图1。9所示,然后按菜单提示操作即可.6。总结。通过本次课程设计练习,我们学会了科学分析问题解决问题的方法,从问题分析下手,然后进行
6、模块设计,详细设计,再进行代码编写和测试。在调试程序过程中,学会了分模块进行,避免了以前那种将程序全部功能都放在main()函数中完成的弊病,使得调试过程更加顺利.另外通过本次练习,在前面学习过程中碰到的诸如结构体使用.指针使用.函数之间参数传递等难点问题也迎刃而解了。源代码:/student。hinclude stdio。h/I/O函数 #include stdlib.h/标准库函数#include /字符操作函数define M 50/定义常数表示记录数typedef struct/定义数据结构 char no20;/学号char name20;/姓名char sex5;/性别char c
7、lasses20;/班号char subject20;/学院专业STUDENTS;/以下是函数原型include”stufun。h”/student.cpp/菜单函数,函数返回值为整数,代表所选的菜单项 .。.。.。.。.。.。.。.。.int menu_select() char s80; int c;printf(”*主菜单*n”); printf(* 0。 输入学生证信息记录*n”); printf(”* 1。 浏览学生证信息记录n”); printf(”* 2。 按学号查找n”); printf(”* 3。 按学号删除n”); printf(”* 4. 按学号修改n”); printf
8、(”* 5。 插入学生记录*n); printf(”* 6。 保存记录到文件*n”); printf(” 7。 加载文件到内存n); printf(”* 8。 按班号浏览n); printf(” 9.统计班级人数*n”); printf(” 10。程序退出n); printf(*n); do printf(”n 输入您的菜单选项编号(0-10):”); /提示输入选项 scanf(s,s);/输入选择项 c=atoi(s);/将输入的字符串转化为整型数getchar();while(c10);/选择项不在010之间重输 return c;/返回选择项,主程序根据该数调用相应的函数 /输入记录,
9、形参为结构体数组,函数值返回类型为整型表示记录长度 。.。.。.。.。.。.int enter(STUDENTS t) int i,n; system(”cls”);printf(”n请输入学生记录条数:n); scanf(”%d,&n);/输入记录数 printf(”请输入学生记录:n”); printf(”学号 姓名 性别 班号 学院专业n); printf(-n”); for (i=0;in;i+) scanf(”s”,ti。no);/输入学号scanf(%s”,ti。name);/输入姓名scanf(”s”,ti。sex);/输入性别scanf(s”,ti。classes);/输入班号
10、scanf(%s”,ti.subject);/学院专业 getchar();return n;/返回记录条数 /显示记录,参数为记录数组和记录条数 。.。.。.。.。.。.void list(STUDENTS t,int n) int i; system(”cls);printf(”n*学生清单*n); printf(学号 姓名 性别 班号 学院专业n”);printf(”-n”); for(i=0;in;i+) printf(”%20s-20s%10s%-10s10sn,ti.no,ti.name,ti.sex,ti.classes,ti。subject); if(i+1)%10=0&n%1
11、00)/判断输出是否达到10条记录printf(-n”); printf(每页显示10条学生记录,按回车键向后翻页。n”); getchar(); system(cls”);printf(n*学生清单*n”); printf(”学号 姓名 性别 班号 学院专业n”); printf(”-n); printf(”-n”); /查找记录 。.。.。.。.。.。void search(STUDENTS t,int n) char s20;/保存待查找学号字符串 int i;/保存查找到结点的序号 system(cls);printf(”请输入查找的学号:n”); scanf(”%s,s);/输入待查
12、找学号 getchar();i=find_no(t,n,s);/调用find_no函数,得到一个整数 if(in-1)/如果整数i值大于n1,说明没找到printf(没有学号为s的学生!n”,s); else print(ti);/找到,调用显示函数显示记录 /删除函数,参数为记录数组和记录条数 .。.。.。.。.。int del(STUDENTS t,int n) char s20;/要删除记录的学号 int ch=0; int i; printf(”请输入要删除的学生学号:n”); scanf(”%s”,s);/输入学号getchar();i=find_no(t,n,s);/调用find_
13、no函数 if(i=n)printf(”没有找到学号为s的学生!n,s);elseprintf(正在删除中!n”);for(;in;i+)/从删除位置开始依次前移学生记录 strcpy(ti。name,ti+1。name); strcpy(ti.no,ti+1。no); strcpy(ti.sex,ti+1.sex);strcpy(ti。classes,ti+1。classes);strcpy(ti。subject,ti+1。subject); n-;/删除后记录数减1printf(删除成功!n”);return n;/返回记录数 /插入记录函数,参数为结构体数组和记录数 。.。.。.。.。.
14、。.。.。int add(STUDENTS t,int n) STUDENTS temp;/新插入记录信息 int i,j; char s20;/确定插入在哪个记录之前 printf(”请输入要插入的学生记录:n”); printf(*n); printf(学号 姓名 性别 班号 学院专业n”); printf(”-n”); scanf(”s%sss%s”,temp。no,temp.name,temp.sex,temp。classes,temp。subject); /输入插入信息 getchar();printf(-n”); if(n0)printf(请输入插入位置的姓名,将新记录插入在该名字
15、前:n”); scanf(”%s”,s);/输入插入位置的姓名 getchar();i=find_name(t,n,s);/调用find_name,确定插入位置 elsei=0;for(j=n-1;j=i;j)/从最后一个结点开始向后移动一条 strcpy(tj+1.no,tj。no); /当前记录的学号拷贝到后一条 strcpy(tj+1。name,tj。name); /当前记录的姓名拷贝到后一条 strcpy(tj+1。sex,tj。sex); /当前记录的性别拷贝到后一条strcpy(tj+1.classes,tj。classes); /当前记录的班号拷贝到后一条strcpy(tj+1。
16、subject,tj.subject); /当前记录的学院专业拷贝到后一条 strcpy(ti.no,temp。no); /将新插入记录的学号拷贝到第i个位置 strcpy(ti.name,temp。name); /将新插入记录的姓名拷贝到第i个位置 strcpy(ti.sex,temp。sex); /将新插入记录的性别拷贝到第i个位置strcpy(ti。classes,temp.classes);strcpy(ti.subject,temp。subject); /将新插入记录的年龄拷贝到第i个位置 n+; /记录数加1 return n; /返回记录数 /保存函数,参数为结构体数组和记录数
17、。.。.。.。.。.。.。.。.。.。.。void save(STUDENTS t,int n) int i; FILE fp; /指向文件的指针 if(fp=fopen(”record.txt”,”wb”)=NULL)/打开文件,并判断打开是否正常 printf(无法打开学生记录文件!n);/打开失败 exit(1); /退出 printf(”n正在保存中n”); fprintf(fp,”%d,n); /将记录数写入文件 fprintf(fp,”rn); /将换行符号写入文件 for(i=0;in;i+) fprintf(fp,20s-30s%10s-10s-10s”,ti。no,ti。na
18、me,ti.sex,ti。classes,ti.subject);/格式写入记录 fprintf(fp,”rn);/将换行符号写入文件 fclose(fp);/关闭文件 printf(”保存成功n”);/显示保存成功 /读入函数,参数为结构体数组 .。.。.。.。.。.int load(STUDENTS t) int i,n; FILE *fp;/指向文件的指针 if(fp=fopen(record。txt,rb)=NULL)/打开文件 printf(”无法打开学生记录文件!n);/打开失败 exit(1);/退出 fscanf(fp,”d”,&n); /读入记录数 for(i=0;in;i+
19、) fscanf(fp,20s30s10s10s10s,ti.no,ti。name,ti。sex,ti。classes,ti。subject); /按格式读入记录 fclose(fp); /关闭文件 printf(已经成功加载学生记录文件到内存!n); /显示保存成功 return n; /返回记录数 /按班号显示记录函数 。.。.。.。.。.。.。.。.。void display(STUDENTS t,int n) int i;char s20;printf(”请输入班号:n); scanf(s”,s); /输入班号getchar();i=find_classes(t,n,s);if(in-
20、1)printf(”没有班号为d的班级n,s);else printf(”n*学生清单*n”); printf(学号 姓名 性别 班号 学院专业n”); printf(”-n”); for(i=0;in;i+)if(strcmp(s,ti.classes)=0) printf(”%20s20s%10s%-10s%10sn”,ti.no,ti。name,ti。sex,ti。classes,ti.subject); printf(”-n”); /按班号统计人数.。.。void classcount(STUDENTS t,int n) int i;char s20;printf(”请输入班号:n”)
21、; scanf(”s”,s); /输入班号getchar();i=find_classes(t,n,s);if(in1)printf(”没有班号为d的班级n,s);elseint j=0; for(i=0;in;i+)if(strcmp(s,ti。classes)=0)j+; printf(该班一共有%d人n,j); /显示指定的一条记录 void print(STUDENTS temp) printf(n*n”); printf(”学号 姓名 性别 班号 学院专业n”);printf(”-n); printf(”20s%-20s%-10s-10s10sn,temp.no,temp.name,
22、temp.sex,temp。classes,temp.subject); printf(”-n”); /按姓名查找函数,参数为记录数组和记录条数以及姓名s 。.。.。.。.。.。.。.。.。.。.。.int find_name(STUDENTS t,int n,char *s) int i; for(i=0;in;i+) /记录开始,直到最后一条 if(strcmp(s,ti.name)=0) /记录中的姓名和待比较的姓名是否相等 return i; /相等,则返回该记录的下标号,程序提前结束 return i; /返回i值 /按班号查找函数,参数为记录数组和记录条数以及姓名s 。.。.。.。
23、.。int find_classes(STUDENTS t,int n,char s) int i; for(i=0;in;i+) /记录开始,直到最后一条 if(strcmp(s,ti。classes)=0) /记录中的姓名和待比较的姓名是否相等 return i; /相等,则返回该记录的下标号,程序提前结束 return i; /返回i值 /按学号查找函数,参数为记录数组和记录条数以及学号no .。.。.。.。.。.int find_no(STUDENTS t,int n,char no) int i; for(i=0;in;i+) /从第一条记录开始,直到最后一条 if(strcmp(n
24、o,ti。no)=0) /记录中的学号和待比较的学号是否相等 return i; /相等,则返回该记录的下标号,程序提前结束 return i; /返回i值 /修改函数,按照输入学号修改void modify(STUDENTS t,int n)char no20; /要修改记录的学号 int ch=0; int i; printf(请输入要修改的学生学号:n”); scanf(”s”,no);/输入学号 getchar();i=find_no(t,n,no); /调用find_no函数 if(i=n)printf(”没有找到学号为s的学生!n,no);elseprintf(”学号为s的学生修改
25、前:n”,no);print(ti);printf(请输入修改后学生记录:n”); printf(学号 姓名 性别 班号 学院专业n”); printf(-n”); scanf(”s”,ti。no);scanf(s,ti。name);scanf(”s,ti.sex);scanf(s,ti。classes);scanf(”s,ti。subject);getchar();printf(”学号为s的学生修改后:n”,no);print(ti);/main.cpp/主函数开始 void main() STUDENTS stuM; /定义结构体数组 int length; /保存记录长度for(;) /
26、无限循环system(cls”); /清屏switch(menu_select() /调用主菜单函数,返回值作为开关语句的条件case 0:length=enter(stu);break; /输入记录case 1:list(stu,length);break; /显示全部记录case 2:search(stu,length);break; /按学号查找记录case 3:length=del(stu,length);break; /按学号删除记录case 4:modify(stu,length);break; /按学号修改记录case 5:length=add(stu,length);break; /插入记录case 6:save(stu,length);break; /保存文件case 7:length=load(stu);break; /加载文件到内存case 8:display(stu,length);break; /按班号显示记录case 9:classcount(stu,length);break; /统计班级人数case 10:exit(0); /程序结束printf(按回车键返回主菜单。.。n”); /提示信息 getchar(); return;12
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100