学生宿舍管理系统C语言编程.docx
- 文档编号:24568535
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:29
- 大小:444.81KB
学生宿舍管理系统C语言编程.docx
《学生宿舍管理系统C语言编程.docx》由会员分享,可在线阅读,更多相关《学生宿舍管理系统C语言编程.docx(29页珍藏版)》请在冰豆网上搜索。
学生宿舍管理系统C语言编程
“学生宿舍管理系统”
C语言课程设计报告
一、程序功能简介
我设计的是“学生宿舍管理系统”,主要是针对住宿学生个人信息的管理,适用对象主要是学校,以方便学校对住宿学生的管理。
包括学生的姓名、学号、性别、专业、班级等等。
在编写过程中主要运用C语言的基本知识有:
数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的调用与使用)等。
二、课程设计要求
该程序是由C语言编写的一个学生宿舍管理查询软件,程序在MicrosoftVisualC++6.0下运行,其主要功能是实现对学生信息的录入、添加、删除、修改、查询、统计。
其中查询可以分别以姓名、学号、宿舍号为关键字查询学生信息。
统计可以分别以学号、宿舍号、性别、班级、专业为关键字进行统计,并且输出信息按学号大小从小到大输出。
三、源程序分析
1)结构分析
1.方案设计
2.数据结构说明
程序中数据主要是学生信息,具体属于类型如下:
structst_message
charname[20];/*学生姓名*/
chardorm[7];/*宿舍号*/
charnum[10];/*学号*/
charsex[5];/*性别*/
charage[4];/*年龄*/
charmajor[20];/*专业*/
charclasss[8];/*班级*/
3.模块功能说明
第一录入模块:
调用input_message(),对住宿学生信息进行录入。
第二添加模块:
调用append_message(),对新来学生信息进行添加录入。
第三修改模块:
调用revise_message(),对需修改学生的信息进行修改。
第四删除模块:
调用delete_message(),对某一学生信息进行删除操作。
第五查询模块:
调用find_message(),分别以姓名、学号、宿舍号对学生信息进行查询。
第六统计模块:
调用census_message(),分别以学号、宿舍号、性别、班级、专业方式对学生信息进行统计,并按学号由小到大输出。
四、编程中遇到的问题及解决方法
在调试过程中,时常会出现输入或显示为乱码的情况,这可能是上下定义的数据类型不同或定义数组长度不够所导致的。
有时候程序中还会出现录入五个数据而只显示四个的情况,这也经常是因为定义的结构体数组长度过低所造成的。
像这些问题只要把数据类型都定义成字符型,并且定义一个合理的数组长度一般都能解决。
在调试过程中我遇到最大的问题出现在删除模块。
在运用“rt+”打开文件并对某一数据进行删除后,往往显示会多显示一行数据。
这是由于“rt+”写数据时只会覆盖数据而不会清除原文件数据,因此文件最后一行数据总会保留在原文件中。
后来我先用“rt”打开文件并读取文件中的数据,然后再用“wt”打开原文件将删除后的数据重新写入文件,最终成功运行。
五、程序运行截屏与结果分析
1.测试数据
对功能1(录入学生信息)的测试:
按照先后顺序分别输入学生信息:
学号姓名班级宿舍号性别年龄专业
05111101张三051111429女18土木工程
04111102李四041111218男18信息工程
对功能2(添加学生信息)的测试:
按照先后顺序分别输入学生信息:
学号姓名班级宿舍号性别年龄专业
02111101陈红021111429女18机械系
03111203赵娜031112101女18能源与环境
对功能3(修改学生信息)的测试:
输入要修改学生的姓名:
林丹,系统显示“该学生信息不存在”。
输入修改学生姓名:
张三,系统显示出该学生信息。
选择修改学号为:
05111118,系统显示出修改后的学生信息。
对功能4(删除学生信息)的测试:
输入要删除学生的学号:
03111210,系统显示“该学生信息不存在”。
输入要删除的学生的学号:
03111203,系统显示出该学生信息。
选择删除该学生信息。
对功能5(查询学生信息)的测试:
查询宿舍号为429的信息,系统显示为:
学号姓名班级宿舍号性别年龄专业
02111101陈红021111429女18机械系
05111101张三051111429女18土木工程
对功能6(统计学生信息)的测试:
选择按学号统计,系统显示为:
学号姓名班级宿舍号性别年龄专业
02111101陈红021111429女18机械系
04111102李四041111218男18信息工程
05111101张三051111429女18土木工程
学生总人数3人,其中男生1人,女生2人。
对功能7(退出系统)的测试:
选择退出系统,程序关闭。
2.详细设计及运行结果
1)函数调用关系图
2)部分模块流程图及运行结果截屏
主页界面
主页流程图
录入界面
录入界面
修改模块
修改界面
统计模块
统计界面
六、心得体会
“万事开头难”这句话在我编写程序的过程中得到了真正的体现。
在最初编写的几天里出现了这样那样的错误一大堆,这主要是由于我对基础知识掌握不扎实所造成的。
但是随后几天里,我对课本知识进行了回顾并不时的向老师和同学进行请教,慢慢的对编写程序也开始得心应手起来。
程序的编写总归是一件费时费力的事情,但只要我们认真编写和调试最后总能成功。
短短以周实习时间我收获颇多,我相信经过这次实习必将为我以后的深入学习打下扎实的基础。
七、源程序
#include
#include
#include
#include
#defineN900
structst_message/*学生信息*/
{
charname[20];/*学生姓名*/
chardorm[7];/*宿舍号*/
charnum[10];/*学号*/
charsex[5];/*性别*/
charage[4];/*年龄*/
charmajor[20];/*专业*/
charclasss[8];/*班级*/
}st[N],t;
sort_message()/*排序模块*/
{inti,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(structst_message);
for(i=0;i fread(&st[i],sizeof(structst_message),1,fp); for(i=0;i for(j=i+1;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 fwrite(&st[i],sizeof(structst_message),1,fp); fclose(fp); } input_message()/*录用信息模块*/ {inti; charchoice; 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(structst_message),1,fp); printf("输入成功! \n是否继续录入(Y/N)? "); choice=getchar(); if(choice=='y'||choice=='Y') continue; else {fclose(fp); break; } } } append_message()/*添加模块*/ {inti; charchoice; FILE*fp; fp=fopen("student.txt","at+"); if(fp==NULL) {printf("\n\n*****库存文件不存在! 请建立。 按任意键退出! "); getchar(); exit (1); } for(i=0;;i++) {structst_messagest[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(structst_message),1,fp); printf("输入成功! \n是否继续添加(Y/N)? "); choice=getchar(); if(choice=='y'||choice=='Y') continue; else {fclose(fp); break; } } } revise_message()/*修改模块*/ {inti,choice,flag,fno,fsize,fnum; charre_name[20],s[20]; FILE*fp; do {fp=fopen("student.txt","rt+"); fno=fileno(fp); fsize=filelength(fno); fnum=fsize/sizeof(structst_message); system("cls"); gets(s); printf("请输入需要修改的学生姓名: "); gets(re_name); for(i=0;i { fread(&st[i],sizeof(structst_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) {case1: printf("\n请输入修改后的学号: "); scanf("%s",st[i].num);break; case2: printf("\n请输入修改后的姓名: "); scanf("%s",st[i].name);break; case3: printf("\n请输入修改后的班级: "); scanf("%s",st[i].classs);break; case4: printf("\n请输入修改后的宿舍号: "); scanf("%s",st[i].dorm);break; case5: printf("\n请输入修改后的性别: "); scanf("%s",st[i].sex);break; case6: printf("\n请输入修改后的年龄: "); scanf("%s",st[i].age);break; case7: printf("\n请输入修改后的专业: "); scanf("%s",st[i].major);break; case8: return1; } 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(structst_message)*i,0); fwrite(&st[i],sizeof(structst_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"); } elseflag=0; }while(flag==1); return1; } delete_message()/*删除模块*/ {inti,j,choice,fno,fsize,fnum; chard_num[10]; FILE*fp; system("cls"); getchar(); fp=fopen("student.txt","rt"); if(fp==NULL) {printf("\n\n*****库存文件不存在! 请先建立。 按任意键退出! "); getchar(); exit (1); } fno=fileno(fp); fsize=filelength(fno); fnum=fsize/sizeof(structst_message); for(i=0;i fread(&st[i],sizeof(structst_message),1,fp); printf("请输入需要删除学生的学号: \n"); gets(d_num); system("cls"); for(i=0;i {if(! strcmp(d_num,st[i].num)) {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是否删除该学生信息: \n"); printf("1.是\n"); printf("2.否\n"); scanf("%d",&choice); switch(choice) {case1: for(j=i;j st[j]=st[j+1]; rewind(fp); fp=fopen("student.txt","wt"); for(i=0;i fwrite(&st[i],sizeof(structst_message),1,fp); fclose(fp); getchar(); break; case2: printf("按任意键返回主菜单! "); getchar(); return0; } break; } } if(i==fnum) {printf("所查学生信息不存在,按任意键返回主菜单! "); getchar(); return0; } printf("删除信息成功,按任意键返回主菜单! "); return1; } find_message()/*查找信息模块*/ {inti,choice,flag,fno,fsize,fnum; charf_name[20]; charf_num[10]; charf_dorm[7]; FILE*fp; system("cls"); do {sort_message(); fp=fopen("student.txt","rt"); if(fp==NULL) {printf("\n\n*****库存文件不存在! 请先建立。 按任意键退出! "); getchar(); exit (1); } fno=fileno(fp); fsize=filelength(fno); fnum=fsize/sizeof(structst_message); system("cls"); printf("请选择查询方式: \n"); printf("1.按姓名查询\n"); printf("2.按学号查询\n"); printf("3.按宿舍号查询\n"); printf("4.返回主页\n"); scanf("%d",&choice); system("cls"); getchar(); switch(choice) {case1: printf("请输入需要查询的姓名: \n"); gets(f_name); printf("\n-----该学生信息-----\n\n"); printf("学号------姓名----班级--宿舍号--性别--年龄--专业---\n"); printf("-----------------------------------------------------\n"); for(i=0;i if(! strcmp(f_name,st[i].name)) 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"); break; case2: printf("请输入要查询的学号: "); gets(f_num); printf("\n-----该学生信息-----\n\n"); printf("学号------姓名----班级--宿舍号--性别--年龄--专业---\n"); printf("-----------------------------------------------------\n"); for(i=0;i {fread(&st[i],sizeof(structst_message),1,fp); if(! strcmp(f_num,st[i].num)) 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"); break; case3: printf("请输入要查询的宿舍号: "); gets(f_dorm); printf("\n-----该宿舍学生信息-----\n\n"); printf("学号------姓名----班级--宿舍号--性别--年龄--专业---\n"); printf("-------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生宿舍管理系统 C语言编程 学生宿舍 管理 系统 语言 编程