“学生宿舍管理系统”C语言课程设计报告一、程序功能简介我设计的是“学生宿舍管理系统”,主要是针对住宿学生个人信息的管理,适用对象主要是学校,以方便学校对住宿学生的管理。
包括学生的、学号、性别、专业、班级等等。
在编写过程中主要运用C语言的基本知识有:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的调用与使用)等。
二、课程设计要求该程序是由C语言编写的一个学生宿舍管理查询软件,程序在Microsoft Visual C++ 6.0下运行,其主要功能是实现对学生信息的录入、添加、删除、修改、查询、统计。
其中查询可以分别以、学号、宿舍号为关键字查询学生信息。
统计可以分别以学号、宿舍号、性别、班级、专业为关键字进行统计,并且输出信息按学号大小从小到大输出。
三、源程序分析1)结构分析1.方案设计2.数据结构说明程序中数据主要是学生信息,具体属于类型如下:struct st_messagechar name[20]; /*学生*/char dorm[7]; /*宿舍号*/char num[10]; /*学号*/char sex[5]; /*性别*/char age[4]; /*年龄*/char major[20]; /*专业*/char classs[8]; /*班级*/3.模块功能说明第一录入模块:调用input_message(),对住宿学生信息进行录入。
第二添加模块:调用append_message(),对新来学生信息进行添加录入。
第三修改模块:调用revise_message(),对需修改学生的信息进行修改。
第四删除模块:调用delete_message(),对某一学生信息进行删除操作。
第五查询模块:调用find_message(),分别以、学号、宿舍号对学生信息进行查询。
第六统计模块:调用census_message(),分别以学号、宿舍号、性别、班级、专业方式对学生信息进行统计,并按学号由小到大输出。
四、编程中遇到的问题及解决方法在调试过程中,时常会出现输入或显示为乱码的情况,这可能是上下定义的数据类型不同或定义数组长度不够所导致的。
有时候程序中还会出现录入五个数据而只显示四个的情况,这也经常是因为定义的结构体数组长度过低所造成的。
像这些问题只要把数据类型都定义成字符型,并且定义一个合理的数组长度一般都能解决。
在调试过程中我遇到最大的问题出现在删除模块。
在运用“rt+”打开文件并对某一数据进行删除后,往往显示会多显示一行数据。
这是由于“rt+”写数据时只会覆盖数据而不会清除原文件数据,因此文件最后一行数据总会保留在原文件中。
后来我先用“rt”打开文件并读取文件中的数据,然后再用“wt”打开原文件将删除后的数据重新写入文件,最终成功运行。
五、程序运行截屏与结果分析1.测试数据对功能1(录入学生信息)的测试:按照先后顺序分别输入学生信息:学号班级宿舍号性别年龄专业05111101 三 051111 429 女 18 土木工程04111102 四 041111 218 男 18 信息工程对功能2(添加学生信息)的测试:按照先后顺序分别输入学生信息:学号班级宿舍号性别年龄专业02111101 红 021111 429 女 18 机械系03111203 娜 031112 101 女 18 能源与环境对功能3(修改学生信息)的测试:输入要修改学生的:林丹,系统显示“该学生信息不存在”。
输入修改学生:三,系统显示出该学生信息。
选择修改学号为:05111118,系统显示出修改后的学生信息。
对功能4(删除学生信息)的测试:输入要删除学生的学号:03111210,系统显示“该学生信息不存在”。
输入要删除的学生的学号:03111203,系统显示出该学生信息。
选择删除该学生信息。
对功能5(查询学生信息)的测试:查询宿舍号为429的信息,系统显示为:学号班级宿舍号性别年龄专业02111101 红 021111 429 女 18 机械系05111101 三 051111 429 女 18 土木工程对功能6(统计学生信息)的测试:选择按学号统计,系统显示为:学号班级宿舍号性别年龄专业02111101 红 021111 429 女 18 机械系04111102 四 041111 218 男 18 信息工程05111101 三 051111 429 女 18 土木工程学生总人数3人,其中男生1人,女生2人。
对功能7(退出系统)的测试:选择退出系统,程序关闭。
2.详细设计及运行结果1)函数调用关系图2)部分模块流程图及运行结果截屏主页界面主页流程图开始功能选择选1选4选3选2录入模块添加模块修改模块删除模块是是是是否否否否录入界面录入界面修改模块输入姓名输入班级输入宿舍输入学号输入性别输入年龄输入专业是否继续录入结束N Y修改界面统计模块统计界面六、心得体会“万事开头难”这句话在我编写程序的过程中得到了真正的体现。
在最初编写的几天里出现了这样那样的错误一大堆,这主要是由于我对基础知识掌握不扎实所造成的。
但是随后几天里,我对课本知识进行了回顾并不时的向老师和同学进行请教,慢慢的对编写程序也开始得心应手起来。
程序的编写总归是一件费时费力的事情,但只要我们认真编写和调试最后总能成功。
短短以周实习时间我收获颇多,我相信经过这次实习必将为我以后的深入学习打下扎实的基础。
七、源程序#include<stdio.h>#include<string.h>#include<stdlib.h>#include<io.h>#define N 900struct st_message /*学生信息*/{char name[20]; /*学生*/char dorm[7]; /*宿舍号*/char num[10]; /*学号*/char sex[5]; /*性别*/char age[4]; /*年龄*/char major[20]; /*专业*/char classs[8]; /*班级*/}st[N],t;sort_message() /*排序模块*/{int i,j,fno,fsize,fnum;FILE *fp;fp=fopen("student.txt","rt+");if(fp==NULL){printf("\n\n*****文件打开错误。
按任意键退出!");getchar();exit(1);}fno=fileno(fp);fsize=filelength(fno);fnum=fsize/sizeof(struct st_message);for(i=0;i<fnum;i++)fread(&st[i],sizeof(struct st_message),1,fp);for(i=0;i<fnum-1;i++)for(j=i+1;j<fnum;j++)if(strcmp(st[i].num,st[j].num)>0){t=st[i];st[i]=st[j];st[j]=t;}rewind(fp);for(i=0;i<fnum;i++)fwrite(&st[i],sizeof(struct st_message),1,fp);fclose(fp);}input_message() /*录用信息模块*/{int i;char choice;FILE *fp;fp=fopen("student.txt","at+");if(fp==NULL){printf("\n\n*****库存文件不存在!请建立。
按任意键退出!");getchar();exit(1);}for (i=0;;i++){ system ("cls");getchar();printf("请输入学生:");gets(st[i].name);printf("\n请输入学生班级:");gets(st[i].classs);printf("\n请输入学生宿舍号:");gets(st[i].dorm);printf("\n请输入学生学号:");gets(st[i].num);printf("\n请输入学生性别:");gets(st[i].sex);printf("\n请输入学生年龄:");gets(st[i].age);printf("\n请输入学生专业:");gets(st[i].major);fwrite(&st[i],sizeof(struct st_message),1,fp);printf("输入成功!\n是否继续录入(Y/N)?");choice=getchar();if(choice=='y'||choice=='Y')continue;else{ fclose(fp);break;}}}append_message() /*添加模块*/{int i;char choice;FILE *fp;fp=fopen("student.txt","at+");if(fp==NULL){printf("\n\n*****库存文件不存在!请建立。
按任意键退出!");getchar();exit(1);}for (i=0;;i++){struct st_message st[N];system ("cls");getchar();printf("请输入所添加学生:");gets(st[i].name);printf("\n请输入所添加学生班级:");gets(st[i].classs);printf("\n请输入所添加学生宿舍号:");gets(st[i].dorm);printf("\n请输入所添加学生学号:");gets(st[i].num);printf("\n请输入所添加学生性别:");gets(st[i].sex);printf("\n请输入所添加学生年龄:");gets(st[i].age);printf("\n请输入所添加学生专业:");gets(st[i].major);fwrite(&st[i],sizeof(struct st_message),1,fp);printf("输入成功!\n是否继续添加(Y/N)?");choice=getchar();if(choice=='y'||choice=='Y')continue;else{fclose(fp);break;}}}revise_message() /*修改模块*/{int i,choice,flag,fno,fsize,fnum;char re_name[20],s[20];FILE *fp;do{fp=fopen("student.txt","rt+");fno=fileno(fp);fsize=filelength(fno);fnum=fsize/sizeof(struct st_message);system("cls");gets(s);printf("请输入需要修改的学生:");gets(re_name);for (i=0;i<fnum;i++){fread(&st[i],sizeof(struct st_message),1,fp);if(!strcmp(re_name,st[i].name)){ printf("\n -----该学生信息-----\n\n");printf("学号----------班级--宿舍号--性别--年龄--专业---\n");printf("-----------------------------------------------------\n");printf("%-8s %-6s %-4s %-6s %-4s %-4s %-20s\n",st[i].num,st[i].name, st[i].classs,st[i].dorm,st[i].sex,st[i].age,st[i].major);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");scanf("%d",&choice);switch(choice){case 1:printf("\n请输入修改后的学号:");scanf("%s",st[i].num);break;case 2:printf("\n请输入修改后的:");scanf("%s",st[i].name);break;case 3:printf("\n请输入修改后的班级:");scanf("%s",st[i].classs);break;case 4:printf("\n请输入修改后的宿舍号:");scanf("%s",st[i].dorm);break;case 5:printf("\n请输入修改后的性别:");scanf("%s",st[i].sex);break;case 6:printf("\n请输入修改后的年龄:");scanf("%s",st[i].age);break;case 7:printf("\n请输入修改后的专业:");scanf("%s",st[i].major);break;case 8:return 1;}getchar();system("cls");printf("\n -----修改后的学生信息-----\n\n");printf("学号----------班级--宿舍号--性别--年龄--专业---\n");printf("-----------------------------------------------------\n");printf("%-8s %-6s %-4s %-6s %-4s %-4s %-20s\n",st[i].num,st[i].name, st[i].classs,st[i].dorm,st[i].sex,st[i].age,st[i].major);rewind(fp);fseek(fp,sizeof(struct st_message)*i,0);fwrite(&st[i],sizeof(struct st_message),1,fp);fclose(fp);break;}}if(i==fnum)printf("\n该学生信息不存在!");printf("\n\n继续修改吗?(Y/N)");choice=getchar();if(choice=='Y'||choice=='y'){flag=1;system("pause");}else flag=0;}while(flag==1);return 1;}delete_message() /*删除模块*/{int i,j,choice,fno,fsize,fnum;char d_num[10];FILE *fp;system("cls");getchar();fp=fopen("student.txt","rt");if(fp==NULL){printf("\n\n*****库存文件不存在!请先建立。