中国地质大学(武汉)C语言课程设计论文学院: 计算机学院专业: 信息安全题目: 学生证管理系统班级: 192101班姓名: 崔新月学号: 20101001364指导教师: 朱莉张冬梅2011年6月6日一课程设计的目的提高程序设计能力,检验课堂教学内容,掌程序设计的基本方法和调试技能。
在编程的过程中可以深入的学习数据结构,算法,编译原理,操作系统原理,软件工程等知识,从而更深层次的提高自己的编程水平。
还有就是通过这次课程设计可以为以后参加ACM等编程大赛做准备,培养我们编程的兴趣。
二课程设计报告正文题目该系统应该具有下列功能:(1)录入某位学生的学生证信息。
(2)给定学号,显示某位学生的学生证信息。
(3)给定某个班级的班号,显示该班所有学生的学生证信息。
(4)给定某位学生的学号,修改该学生的学生证信息。
(5)给定某位学生的学号,删除该学生的学生证信息。
(6)提供一些统计给类信息的功能。
【输入要求】应用程序运行后,在屏幕上显示一个菜单。
用户可以根据要求,选定相应的操作项目。
进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。
【输出要求】(1)应用程序运行后,要在屏幕上显示一个菜单。
(2) 要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
【提示】设计时可采用结构体类型和一维数组类型,用来保存学生证的内容。
三 分析由于题目要求给出清晰明确懂得信息,所以在程序中要提供各种不同功能的模块。
这样子可以使程序更加简单易懂,可读性强。
四总体设计五 具体设计及分析1.主函数主函数主要提供菜单界面以及各模板函数的调用。
以结构体的形式定义。
通过直到型循环以及sqitch 语句来实现各功能模块的调用以及循环。
#include<stdio.h>#define J30信息输入模块信息查询模块 信息修改模块 信息删除模块 信息统计模块功能选择系统模块main() /*主函数菜单*/ {int n,q;do{printf("\t\t***********************MENU*********************** **\n\n");printf("\t\t\t\t 1. 录入\n");printf("\t\t\t\t 2. 查询\n");printf("\t\t\t\t 3. 修改\n");printf("\t\t\t\t 4. 删除\n");printf("\t\t\t\t 5. 统计\n");printf("\t\t\t\t 6. 退出\n");printf("\n\t\t************************************************** **\n");printf("请选择你需要做什么(1-6):[ ]\b\b");scanf("%d",&n);if(n<1||n>6){q=1;getchar();}else q=0;}while(q==1);switch(n){case 1:scanf_stu();break;case 2:search();break;case 3:revise();break;case 4:delete_stu();break;case 5:stat();break;case 6:exit(0);}}struct student /*定义结构体*/ {char num[10];char class_num[10];char name[10];char sex[4];char nation[10];char native[10];int born;int ave; }2.各功能模块的设计(1)输入模块主要用于录入学生的学生证信息,调用添加各文件函数int scanf_stu(){int n;n=load(); /*调用加载文件函数*/ input(n); /*调用添加记录函数*/ save(n); /*调用保存函数*/ printf_back(); /*调用选择返回或结束函数*/ }int load() /*加载文件记录并计算学生个数函数*/ {FILE *fp;int i;if((fp=fopen("student card.txt","rb"))==NULL){printf("\n Can not open file\n");return NULL;}for(i=0;!feof(fp);i++)fscanf(fp,"%s%s%s%s%s%s%d%d",st[i].num,st[i].class_num,st[i].name,st[i]. sex,st[i].nation,st[i].native,&st[i].born,&st[i].ave);fclose(fp);return(i);}int input(int i){bijiao_num(i); /*调用确认学号不重复函数*/ class_input(i); /*调用输入班号函数*/ printf("\n 姓名:");scanf("%s",st[i].name);printf("\n 性别:");scanf("%s",st[i].sex);printf("\n 民族:");scanf("%s",st[i].nation);printf("\n 籍贯:");scanf("%s",st[i].native);printf("\n 出生年月:");scanf("%d",&st[i].born);st[i].ave=1;}int num_input(int i) /*输入学号函数*/ {int j,k,q;do{q=0;printf("\n学号:");scanf("%s",st[i].num);for(j=0;st[i].num[j]!='\0';j++) /*确认学号仅由数字组成*/ if(st[i].num[j]<'0'||st[i].num[j]>'9'){printf("输入错误!! 学号仅有0-9的数字组成! 请重新输入");q=1;break;}}while(q==1);}int bijiao_num(int i) /*确认学号不重复函数*/ {int j,k,q;do{q=0;printf("\n学号:");scanf("%s",st[i].num);for(j=0;st[i].num[j]!='\0';j++) /*确认学号仅由数字组成*/ if(st[i].num[j]<'0'||st[i].num[j]>'9'){printf("输入错误!! 学号仅有0-9的数字组成! 请重新输入");q=1;break;}if(q!=1)for(k=0;k<i;k++) /*确认学号不重复*/ if(strcmp(st[k].num,st[i].num)==0){printf("这个学号已经存在!! 请重新输入! \n");q=1;break;}}while(q==1);}int class_input(int i) /*班号输入函数*/ {int j,k,q;do{q=0;printf("\n班号:");scanf("%s",st[i].class_num);for(j=0;st[i].class_num[j]!='\0';j++) /*确认班号仅由数字组成*/ if(st[i].class_num[j]<'0'||st[i].class_num[j]>'9'){printf("输入错误!! 班号仅有0-9的数字组成! 请重新输入");q=1;break;}}while(q==1);}(2) 查询模块主要用于根据题目的要求来查询各学生的信息。
search(){int n,q;do{printf("\t\t***********************MENU*********************** **\n\n");printf("\t\t\t\t 1. 按学号查询\n");printf("\t\t\t\t 2. 按班号查询\n");printf("\t\t\t\t 3. 返回\n");printf("\n\t\t************************************************** **\n");printf("请选择你需要做什么(1-3):[ ]\b\b");scanf("%d",&n);if(n<1||n>3){q=1;getchar();}else q=0;}while(q==1);switch(n){case 1:search_num();break; /*调用按学号查询函数*/ case 2:search_class();break; /*调用按班号查询函数*/ case 3:menu(); /*调用主菜单函数*/ }}int search_num() /*按学号查询函数*/ {int n,i;char a[10];printf("\n请输入要查询学生的学号:");scanf("%s",a);n=load(); /*调用加载函数*/ for(i=0;i<n;i++){if(strcmp(st[i].num,a)==0){printf_face(); /*调用显示数据结构项目函数*/printf_one(i); /*调用输出一个学生数据函数*/break;}}if(i==n) /*判断是否查找到*/ printf("\n没有找到您要查询的学生!请核对无误后重新输入!");printf_back();}printf_face(){printf("\n学号班号姓名性别民族籍贯出生年份\n"); }printf_one(int i){printf("%s %s %s %s %s %s %d\n",st[i].num,st[i].class_num,st[i].name,st[i].sex,st[i].nation,st[i].native,st[i].born);}int search_class() /*按班号查询函数*/ {int n,i,k=0;char b[10];printf("\n请输入要查询的班号:");scanf("%s",b);n=load(); /*调用加载函数*/ printf_face(); /*调用显示数据结构项目函数*/ for(i=0;i<n;i++){if(strcmp(st[i].class_num,b)==0){printf_one(i); /*调用输出一个学生数据函数*/k++;}}if(k==0) /*判断是否查找到*/ printf("\n没有找到您要查询的班号!请核对无误后重新输入!");elseprintf("\n共查找到该班学生%d 个",k);printf_back();}(3)修改模块主要用于根据学生的学号,修改该学生的学生证信息。