C语言课程设计报告学院:计算机学院专业:网络工程题目: 学生证管理系统班序号:19313126学号:*************:***2013年12月31日报告目录一、实习内容要求—————————————————————————3二、需求分析—————————————————————————3三、总体设计—————————————————————————3四、设计简介—————————————————————————44.0 头文件——————————————————————————44.1 主函数—————————————————————————54.2 子函数菜单—————————————————————————54.3 子函数添加—————————————————————————54.4 子函数修改—————————————————————————104.5 子函数浏览—————————————————————————134.6 子函数查询—————————————————————————144.7 子函数统计—————————————————————————184.8 子函数删除—————————————————————————23五、上机操作—————————————————————————255.1 系统说明—————————————————————————255.2 系统测试—————————————————————————25六、总结__________________________________________________31一、实习内容要求1、用C语言编写一个学生证管理系统,该系统具有以下功能:(1)录入某位学生的学生证信息;(2)给定学号,显示某位学生的学生证信息;(3)给定某个班级的班号,显示该班所有学生的学生证信息;(4)给定某位学生的学号,修改该学生的学生证信息;(5)给定某位学生的学号,删除该学生的学生证信息;(6)提供一些统计各类信息的功能;(7)提供浏览所有学生的学生证信息的功能。
2、输入要求应用程序运行后,在屏幕上显示一个菜单;用户可以根据要求,选定相应的操作项目;进入某个操作后,根据应用程序的提示,从键盘输入相应的信息。
3、输出要求(1)应用程序运行后,要在屏幕上显示一个菜单;(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
二、需求分析学生证信息采用文件存储,因而要提供问价的输入/输出操作;要根据给定的学号或班号进行相应操作,要提供查找操作;实现一些统计给雷信息的功能要提供统计操作;另外,还要提供键盘式选择菜单以实现功能选择。
三、总体设计这个程序被设计成数据输入模块、数据查找模块、数据子函数删除和数据子函数统计。
即:添加,修改、查询,浏览、删除,统计等,如下图所示:四、设计简介4.0 头文件#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 100struct Class{char Cname[20]; //班名char Cno[20]; //班号};struct Student //学生{char Sname[20]; //姓名char Sex[10]; //性别char Sno[20]; //学号int Age; //年龄struct Class CInfo; //嵌套结构体,表示班级信息}StuInfo[N]; //结构体数组,用作读取和存放临时数据4.1 主函数void main(){menu();getchar();}4.2 子函数菜单void menu(){i nt chose;int right;do{printf("\n\t\t\t\t学生证管理系统\n");printf("*******************************************************************************\ n");printf("\t\t\t\t1.添加学生信息");printf("\n\t\t\t\t2.修改学生信息");printf("\n\t\t\t\t3.全部学生信息");printf("\n\t\t\t\t4.查询学生信息");printf("\n\t\t\t\t5.统计学生信息");printf("\n\t\t\t\t6.删除学生信息");printf("\n\t\t\t\t7.退出系统\n");printf("*******************************************************************************"); printf("请输入数字选择:");scanf("%d",&chose);if(chose<1||chose>8){right=1;printf("输入错误,请重新输入!\n");getchar();}else right=0;}while(right==1);s witch(chose){case 1:add(); break; //子函数添加case 2:modify(); break; //子函数修改case 3:browse(); break; //子函数浏览case 4:quiry(); break; //子函数查询case 5:stastic(); break; //子函数统计case 6:Delete(); break; //子函数删除case 7:exit(0); //退出}}4.3 子函数添加首先要判断文件StuInfo.txt是否存在,如果存在就以读写(r+)的方式打开,如果不存在,就以写(w)的方式创建文件StuInfo.txt。
输入格式要求:性别为男或女,学号为11位且不能重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。
此外,如果以读写的方式打开,还要判断记录数num<N是否成立,因为结构体数组的大小为N,当num=N时,表示已满,不能再存储数据,需要修改N的值。
void add(){int num;int i;int age;char sno[20];char sex[20];char cno[20];int right;FILE*fp;if((fp=fopen("StuInfo.txt","r+"))==NULL){if((fp=fopen("StuInfo.txt","w"))==NULL){printf("\n文件不存在且创建失败,返回!\n"); menu();}printf("\n请按照提示输入学生信息:\n\n");printf("姓名:");scanf("%s",&StuInfo[0].Sname);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(StuInfo[0].Sex,sex);do{printf("\n学号(11位):");scanf("%s",sno);if(strlen(sno)!=11){printf("输入错误,学号长度应为11位数!\n");right=1;getchar();}else right=0;}while(right==1);strcpy(StuInfo[0].Sno,sno);do{printf("\n年龄:");scanf("%d",&age);if(age<=0||age>100){printf("年龄应在0-100之间,请重新输入年龄!\n");right=1;getchar();}else right=0;}while(right==1);StuInfo[0].Age=age;do{printf("\n班号(6位):");scanf("%s",cno);if(strlen(cno)!=6){printf("输入错误,班号长度应为6位数!\n");right=1;getchar();}else right=0;}while(right==1);strcpy(StuInfo[0]o,cno);printf("\n班名:");scanf("%s",&StuInfo[0]ame);fprintf(fp,"\n%s\t%s\t%s\t%d\t%s\t%s",StuInfo[0].Sname,StuInfo[0].Sex,StuInfo[0].Sno,StuInfo[0].Age,StuInf o[0]o,StuInfo[0]ame);fclose(fp);printf("\n保存成功!\n");printf("\n请按enter键返回主菜单!\n");getchar();getchar();menu();} //以上的输入是以写的方式输入,下面是以读写的方式输入数据for(i=0;!feof(fp);i++){fscanf(fp,"%s%s%s%d%s%s",&StuInfo[i].Sname,&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].Age,&StuInfo[i].CI o,&StuInfo[i]ame);}num=i; //记录数if(num==N){printf("\n保存记录数超出结构体数组数的大小,请先修改N的值!\n");printf("\n请按enter键返回主菜单!\n");getchar();getchar();menu();}printf("\n请按照提示输入学生信息:\n\n");printf("姓名:");scanf("%s",&StuInfo[num].Sname);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(StuInfo[num].Sex,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,StuInfo[i].Sno)==0){printf("该学号已经存在,请重新输入!\n");right=1;getchar();}}}while(right==1);strcpy(StuInfo[num].Sno,sno);do{printf("\n年龄:");scanf("%d",&age);if(age<=0||age>100){printf("年龄应在0-100之间,请重新输入年龄!\n");right=1;getchar();}else right=0;}while(right==1);StuInfo[num].Age=age;do{printf("\n班号(6位):");scanf("%s",cno);if(strlen(cno)!=6){printf("输入错误,班号长度应为6位数!\n");right=1;getchar();}else right=0;}while(right==1);strcpy(StuInfo[num]o,cno);printf("\n班名:");scanf("%s",&StuInfo[num]ame);//把该记录写到文件末尾fprintf(fp,"\n%s\t%s\t%s\t%d\t%s\t%s",StuInfo[num].Sname,StuInfo[num].Sex,StuInfo[num].Sno,StuInfo[num]. Age,StuInfo[num]o,StuInfo[num]ame);fclose(fp);printf("\n保存成功!\n");printf("\n请按enter键返回主菜单!\n");getchar();getchar();menu();}4.4 子函数修改先判断文件StuInfo.txt以读(r)的方式能否打开,不能就返回,可以就读入记录;然后输入学号查找记录,没找到就返回,找到就按照提示修改该记录,与输入模块一样,输入的格式要求:性别为男或女,学号为11位且不能与除当前修改的记录的学号外的记录的学号重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。