学生宿舍管理系统C语言编程.docx

上传人:b****6 文档编号:4809165 上传时间:2022-12-09 格式:DOCX 页数:26 大小:331.95KB
下载 相关 举报
学生宿舍管理系统C语言编程.docx_第1页
第1页 / 共26页
学生宿舍管理系统C语言编程.docx_第2页
第2页 / 共26页
学生宿舍管理系统C语言编程.docx_第3页
第3页 / 共26页
学生宿舍管理系统C语言编程.docx_第4页
第4页 / 共26页
学生宿舍管理系统C语言编程.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

学生宿舍管理系统C语言编程.docx

《学生宿舍管理系统C语言编程.docx》由会员分享,可在线阅读,更多相关《学生宿舍管理系统C语言编程.docx(26页珍藏版)》请在冰豆网上搜索。

学生宿舍管理系统C语言编程.docx

学生宿舍管理系统C语言编程

学生宿舍管理系统---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)部分模块流程图及运行结果截屏

主页界面

 

主页流程图

 

 

录入界面

输入姓名

输入班级

输入宿舍

输入学号

输入性别

输入年龄

输入专业

是否继续录入

结束

N

Y

录入界面

修改模块

输入要修改学生的姓名

功能选择

选1

选7

选4

选8

选2

选3

选5

选6

修改学号

修改姓名

修改班级

修改宿舍

修改性别

修改年龄

修改专业

是否继续

结束

返回主页

 

修改界面

统计模块

输入统计方式

功能选择

选1

选4

选6

选2

选3

选5

按学号

按宿舍

按性别

按班级

按专业

结束

返回主页

统计界面

六、心得体会

“万事开头难”这句话在我编写程序的过程中得到了真正的体现。

在最初编写的几天里出现了这样那样的错误一大堆,这主要是由于我对基础知识掌握不扎实所造成的。

但是随后几天里,我对课本知识进行了回顾并不时的向老师和同学进行请教,慢慢的对编写程序也开始得心应手起来。

程序的编写总归是一件费时费力的事情,但只要我们认真编写和调试最后总能成功。

短短以周实习时间我收获颇多,我相信经过这次实习必将为我以后的深入学习打下扎实的基础。

七、源程序

#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

{f

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1