目 录
一、实验目的................................................................................................................... 2 二、实验内容................................................................................................................... 2 三、实验环境................................................................................................................... 2 四、需求分析................................................................................................................... 2 五、概要设计................................................................................................................... 3
1、方案设计 ............................................................................................................. 3 2、数据结构说明 ...................................................................................................... 3 3、模块功能说明 ...................................................................................................... 4 六、详细设计及运行结果 ................................................................................................. 5
1、登陆界面 ............................................................................................................. 5 2、主界面 . ................................................................................................................ 5 3、录入模块 ............................................................................................................. 6 4、录入界面 ............................................................................................................. 7 5、打印学生信息界面 ............................................................................................... 7 6、更新学生信息界面 ............................................................................................... 8 7、查询宿舍信息界面 ............................................................................................... 8 8、统计宿舍信息界面 ............................................................................................... 9 9、学生宿舍排序 ...................................................................................................... 9 七、源程序 .................................................................................................................... 10 八、心得体会................................................................................................................. 28
学生宿舍管理系统
一、实验目的
1. 2. 3. 4.
熟练掌握线性表的基本操作在顺序存储和链式存储上的实现。、; 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 掌握线性表的动态分配顺序存储结构的定义和基本操作的实现;
通过实验帮助学生加深对C 语言的使用(特别是函数的参数调用、指针
类型的应用和链表的建立等各种基本操作)。
二、实验内容
我组设计的是“学生宿舍管理系统”,主要是针对住宿学生个人信息的管理,适用对象主要是学校,以方便学校对住宿学生的管理。包括学生的姓名、学号、性别、专业、班级等等。在编写过程中主要运用C 语言的基本知识有:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的调用与使用)等。
三、实验环境
台式计算机每人一台; 软件:Visual C++6.0;
四、需求分析
该程序是由C 语言编写的一个宿舍管理查询软件,本程序在Microsoft Visual C++ 6.0下运行,其主要功能是实现对学生信息的录入、添加、删除、修改、查询、统计。其中查询可以分别以姓名、学号、宿舍号为关键字查询学生信息。统计可以分别以学号、宿舍号、性别、班级、专业为关键字进行统计,并且输出信息按学号大小从小到大输出。
五、概要设计
1、方案设计
2、数据结构说明
程序中数据主要是学生信息和宿舍信息,具体属于类型如下: struct stu {
char name[20]; int num; char sex; int age; int grade; int nclass; char zhuanye[30]; };
struct dom
{
int bui_num; int floor_num; int room_num; int bed_num; struct stu st; }s[MAX],p;
3、模块功能说明
第一密码模块:调用cipher(),进行管理者的注册与登录操作。 第二录入模块:调用input_message(),对住宿学生信息进行录入。 第三添加模块:调用append_message(),对新来学生信息进行添加录入。 第四修改模块:调用revise_message(),对需修改学生的信息进行修改。 第五删除模块:调用delete_message(),对某一学生信息进行删除操作。
第六查询模块:调用find_message(),分别以姓名、学号、宿舍号对学生信息进行查询。 第七统计模块:调用census_message(),分别以学号、宿舍号、性别、班级、专业方式对学生信息进行统计,并按学号由小到大输出。
六、详细设计及运行结果
1、登陆界面
2、主界面
5、打印学生信息界面
7、查询宿舍信息界面
9、学生宿舍排序
七、源程序
#include #include "string.h"
#define MAX 10 #define
PRINT1
printf("---------------------------------------------------------------------------\n")
#define PRINT2 printf("学号--学生姓名--性别--年龄--年级--班级--专业--楼号--楼层号--房间号--床号\n\n") int sum; struct stu {
char name[20]; int num; char sex; int age; int grade; int nclass; char zhuanye[30]; };
struct dom {
int bui_num; int floor_num; int room_num; int bed_num; struct stu st;
}s[MAX],p;
/*保存信息*/
save_message()
{ FILE *fp;
int i;
if((fp=fopen("dom.txt","wt"))==NULL)
{
printf("读文件错误!\n");
return 0;
}
for(i=0;i
if(fwrite(&s[i],sizeof(struct dom),1,fp)!=1)
printf("写文件错误!\n");
fclose(fp);
}
/*输入模块*/
input_message()
{ int i=0;
//clrscr();
printf("\n\n 录入学生信息(最多%d个)\n",MAX);
printf(" ----------------------------\n");
do
{
printf("\n 第%d个学生\n\n",i+1);
printf("\n 学号: ");
scanf("%d",&s[i].st.num);
if(s[i].st.num==0) break;
printf("\n 学生姓名: ");
scanf("%s",s[i].st.name);
printf("\n 学生性别(男生用M 表示, 女生用F 表示):");
getchar();
scanf("%c",&s[i].st.sex);
printf("\n 学生年龄: ");
scanf("%d",&s[i].st.age);
printf("\n 学生年级: ");
scanf("%d",&s[i].st.grade);
printf("\n 学生班级: ");
scanf("%d",&s[i].st.nclass);
printf("\n 学生专业: ");
scanf("%s",&s[i].st.zhuanye);
printf("\n 宿舍楼号: ");
scanf("%d",&s[i].bui_num);
printf("\n 宿舍楼层号: ");
scanf("%d",&s[i].floor_num);
printf("\n 宿舍房间号: ");
scanf("%d",&s[i].room_num);
printf("\n 宿舍床号: ");
scanf("%d",&s[i].bed_num);
i++;
}while(i
printf("\n --%d个学生的信息输入完毕!--\n",i);
sum=i;
printf("\n 按任意键返回主菜单!");
getchar();
// bioskey(0);
return 0;
}
/*读取信息*/
int read_message()
{
FILE *fp;
int i=0;
if((fp=fopen("dom.txt","rt"))==NULL)
{
printf("\n\n*****暂时还没有任何信息,按任意键进入主菜单选择基本信息的录入!*****\n");
return 0;
}
while(!feof(fp))
{
fread(&s[i],sizeof(struct dom),1,fp);
i++;
}
fclose(fp);
return(i);
}
/*输出模块*/
output_message()
{ int i=0;
// clrscr();
printf("\n\n --学生信息表-- \n\n");
PRINT2;
PRINT1;
for(i=0;i
if(s[i].st.num!=0)
{
printf("%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i].st.num,s[i].st.name,s[i].st.sex,s[i].st.age,
s[i].st.grade,s[i].st.nclass,s[i].st.zhuanye,s[i].bui_num,s[i].floor_num,s[i].room_num,s[i].bed_num);
printf("\n");
// bioskey(0);
}
return 0; ///
}
/*添加学生信息*/
insert_message()
{int i=sum,flag=0;
char choice;
printf("\n\n 添加一个新同学\n");
printf(" ---------------\n");
do
{
printf("\n 新学号: ");
scanf("%d",&s[i].st.num);
printf("\n 学生姓名: ");
scanf("%s",s[i].st.name);
printf("\n 学生性别(男生用M 表示, 女生用F 表示):");
getchar();
scanf("%c",&s[i].st.sex);
printf("\n 学生年龄: ");
scanf("%d",&s[i].st.age);
printf("\n 学生年级: ");
scanf("%d",&s[i].st.grade);
printf("\n 学生班级: ");
scanf("%d",&s[i].st.nclass);
printf("\n 学生专业: ");
scanf("%s",s[i].st.zhuanye);
printf("\n 宿舍楼号: ");
scanf("%d",&s[i].bui_num);
printf("\n 宿舍楼层号: ");
scanf("%d",&s[i].floor_num);
printf("\n 宿舍房间号: ");
scanf("%d",&s[i].room_num);
printf("\n 宿舍床号: ");
scanf("%d",&s[i].bed_num);
sum++;
printf("\n 要继续吗?(Y/N)");
getchar();
scanf("%c",&choice);
if(choice=='y' || choice=='Y')
{
flag=1;
i++;
printf("\n 继续!\n");
}
else flag=0;
}while(flag==1);
printf("\n 按任意键返回主菜单!");
return 0;
}
/*删除模块*/
del_message()
{int flag,del_num,i,k;
char choice;
do
{printf("\n 输入要删除的学生学号: ");
scanf("%d",&del_num);
for(i=0;i
if(del_num==s[i].st.num)
for(k=i;k
s[k]=s[k+1];
sum--;
printf("\n\n 继续吗?(Y/N)");
getchar();
scanf("%c",&choice);
if(choice=='y' || choice=='Y')
{
flag=1;
printf("\n 继续!\n");
}
else flag=0;
}while(flag==1);
printf("\n\n 按任意键返回主菜单!");
getchar();
return 0;
}
/*修改模块*/
revise_message()
{int i=0,choices,revise_num,flag=0; char choice;
do
{
printf("\n 输入要修改的学生号: ");
scanf("%d",&revise_num);
for(i=0;i
if(s[i].st.num==revise_num)
{
printf("\n --学生信息--\n");
PRINT1;
PRINT2;
printf("%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i].st.num,s[i].st.name,s[i].st.sex,s[i].st.age,s[i].st.grade,s[i].st.nclass,s[i].st.zhuanye,s[i].bui_num,s[i].floor_num,s[i].room_num,s[i].bed_num);
printf("\n 您要修改哪一项?\n");
printf("\n 1.学号\n");
printf("\n 2.性别\n");
printf("\n 3.姓名\n");
printf("\n 4.年龄\n");
printf("\n 5.年级\n");
printf("\n 6.班级\n");
printf("\n 7.专业\n");
printf("\n 8.楼号\n");
printf("\n 9.楼层号\n");
printf("\n 10.房间号\n");
printf("\n 11.床号\n");
printf("\n 请选择(1-11): ");
scanf("%d",&choices);
switch(choices)
{
case 1:printf("\n 输入修改后的学号");
scanf("%d",&s[i].st.num);break;
case 2:printf("\n 输入修改后的姓名");
scanf("%s",s[i].st.name);break;
case 3:printf("\n 输入修改后的性别");
scanf("%s",s[i].st.sex);break;
case 4:printf("\n 输入修改后的年龄");
scanf("%d",&s[i].st.age);break;
case 5:printf("\n 输入修改后的年级");
scanf("%d",&s[i].st.grade);break;
case 6:printf("\n 输入修改后的班级");
scanf("%d",&s[i].st.nclass);break;
case 7:printf("\n 输入修改后的专业");
scanf("%s",&s[i].st.zhuanye);break;
case 8:printf("\n 输入修改后的楼号");
scanf("%d",&s[i].bui_num);break;
case 9:printf("\n 输入修改后的楼层号");
scanf("%d",&s[i].floor_num);break;
case 10:printf("\n 输入修改后的房间号");
scanf("%d",&s[i].room_num);break;
case 11:printf("\n 输入修改后的床号");
scanf("%d",&s[i].bed_num);break;
}
PRINT1;
PRINT2;
printf("%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i].st.num,s[i].st.name,s[i].st.sex,s[i].st.age,s[i].st.grade,s[i].st.nclass,s[i].st.zhuanye,s[i].bui_num,s[i].floor_num,s[i].room_num,s[i].bed_num);
break;
}
if(i==sum)
printf("\n 该学生不存在!");
// bioskey(0);
return 0;
/* printf("\n\n 继续修改吗?(Y/N)");
getchar();
scanf("%c",&choice);
if(choice=='y'|| choice=='Y')
{
flag=1;
printf("\n 继续!\n");
}
else flag=0; */
}while(flag==1);
getchar();
printf("\n 按任意键返回主菜单! ");
return 0;
}
/*更新模块*/
renew_message()
{
int choice;
do
{
printf("\n\n\n ***** printf(" 1. printf(" 2. printf(" 3. printf(" 0. printf(" scanf("%d",&choice);
switch(choice)
{
case 1:insert_message();break; case 2:del_message();break;
case 3:revise_message();break; case 0:break;
}
}while(choice!=0);
return 0;
}
更新学生信息*****\n\n"); 添加学生信息\n\n"); 删除学生信息\n\n"); 修改学生信息\n\n"); 返回主菜单\n\n"); 请选择(0-3): ");
inquire_name() /*按姓名查询*/
{
int i,j=0;
char inquire_name[10];
printf("\n 输入要查询的学生姓名: ");
scanf("%s",inquire_name);
for(i=0;i
if(strcmp(s[i].st.name,inquire_name)==0&&s[i].st.num!=0)
{
printf("\n --学生信息-- \n");
PRINT1;
PRINT2;
printf("%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i].st.num,s[i].st.name,s[i].st.sex,s[i].st.age,
s[i].st.grade,s[i].st.nclass,s[i].st.zhuanye,s[i].bui_num,s[i].floor_num,s[i].room_num,s[i].bed_num);
}
else j++;
if(j==sum)
printf("\n 该学生不存在!");
return 0;
}
int inquire_num() /*按学号查询*/
{
int i,j=0,inquire_num;
printf("\n 输入要查询的学生学号: ");
scanf("%d",&inquire_num);
for(i=0;i
if(inquire_num==s[i].st.num)
{
printf("\n --学生信息--\n");
PRINT1;
PRINT2;
printf("%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i].st.num,s[i].st.name,s[i].st.sex,s[i].st.age,
s[i].st.grade,s[i].st.nclass,s[i].st.zhuanye,s[i].bui_num,s[i].floor_num,s[i].room_num,s[i].bed_num);
}
else j++;
if(j==sum)
printf("\n 该学生不存在!");
return 0;
}
/*查询模块*/
inquire_message()
{int choice;
do
{
printf("\n\n *****查询学生信息*****\n\n");
printf(" 1.按学生姓名查询\n");
printf(" 2.按学生学号查询\n");
printf(" 0.回主菜单\n");
printf(" 请选择(0-2): ");
scanf("%d",&choice);
switch(choice)
{
case 1:inquire_name();break;
case 2:inquire_num();break;
case 0:break;
}
}while(choice!=0);
return 0;
}
count_person() /*学生住宿情况统计*/
{
int i,j=0,count_grade,count_nclass;
char count_zhuanye[20];
printf("\n 输入要统计的学生专业, 年级, 班级: ");
scanf("%10s %8d %8d",&count_zhuanye,&count_grade,&count_nclass);
printf("\n 住宿情况");
printf("\n -------------------------------\n");
printf("\n 姓名 学号 楼号 楼层号 房间号 床号 \n");
for(i=0;i
if(s[i].st.grade==count_grade&&s[i].st.nclass==count_nclass&&strcmp(s[i].st.zhuanye,count_zhuanye)==0)
printf("\n%10s%8d%8d%8d%8d%8d\n",s[i].st.name,s[i].st.num,s[i].bui_num,s[i].floor_num,
s[i].room_num,s[i].bed_num);
else j++;
if(j==sum)
printf("\n 该学生不存在!");
return 0;
}
/*统计模块*/
count_message()
{
int choice;
do
{
printf("\n\n *****统计住宿信息*****\n");
printf(" 1.学生住宿情况统计\n");
printf(" 0.返回主菜单\n");
printf(" 请选择(0-1): ");
scanf("%d",&choice);
switch(choice)
{
case 1:count_person();break;
case 0:break;
}
}while(choice!=0);
return 0;
}
sort_domitry() /*学生宿舍情况排序*/
{
int i,j ;
printf("\n 宿舍排序\n");
printf(" --------------------------------------------\n");
printf("\n 排序 姓名 学号 性别 楼号 楼层号 房间号\n");
for(i=0;i
{
for(j=i+1;j
if(s[i].bui_num
{
p=s[i];
s[i]=s[j];
s[j]=p;
}
else if(s[i].bui_num==s[j].bui_num)
if(s[i].floor_num
{
p=s[i];
s[i]=s[j];
s[j]=p;
}
else if(s[i].floor_num==s[j].floor_num)
if(s[i].room_num
{
p=s[i];
s[i]=s[j]; 床号
s[i]=p;
}
else if(s[i].room_num==s[j].room_num)
if(s[i].bed_num
{
p=s[i];
s[i]=s[j];
s[j]=p;
}
}
for(i=0;i
if(s[i].st.num!=0)
printf("\n%12d%8s%8d%8c%8d%8d%8d%6d\n\n",i+1,s[i].st.name,s[i].st.num,s[i].st.sex,s[i].bui_num,s[i].floor_num,s[i].room_num,s[i].bed_num);
return 0;
}
/*排序模块*/
sort_message()
{ int choice;
do
{
printf("\n *****宿舍排序*****\n");
printf(" 1.宿舍情况排序\n");
printf(" 0.返回主菜单!\n");
printf(" 请选择(0-1): ");
scanf("%d",&choice);
switch(choice)
{
case 1:sort_domitry();break;
case 0:break;
}
}
while(choice!=0);
return 0;
}
void main()
{
int choice;
sum=read_message();
// bioskey(0);
do
{
// clrscr();
printf("\n\n\n *****宿舍管理系统*****\n\n");
printf(" 1.录入学生信息\n\n");
printf(" 2.打印学生信息\n\n");
printf(" 3.更新学生信息\n\n");
printf(" 4.查询宿舍信息\n\n");
printf(" 5.统计宿舍信息\n\n");
printf(" 6.学生宿舍排序\n\n");
printf(" 0.退出系统\n\n");
printf(" 请选择(0-6):");
scanf("%d",&choice);
switch(choice)
{
case 1: input_message(); break; /*录入模块*/
case 2: output_message(); break; /*输出模块*/
case 3: renew_message(); break; /*更新模块*/
case 4: inquire_message(); break; /*查询模块*/
case 5: count_message(); break; /*统计模块*/
case 6: sort_message(); break; /*排序模块*/
; case 0: break; /*退出系统*/
}
}while(choice!=0);
save_message();
//save_message(sum)
printf("\n以上学生信息已保存!-(文件名:domitry.txt)\n");
}
八、心得体会
做了一个星期的程序设计终于做完了,在这次程序设计课中,真是让我获益匪浅,我突然发现写程序还挺有意思的。
通过这次的程序设计,发现一个程序设计就是算法与数据结构的结合体,自己也开始对程序产生了前所未有的兴趣,以前偷工减料的学习也不可能一下子写出一个程序出来,于是我就认真看老师写的程序,发现我们看懂了一个程序其实不难,难的是对于一个程序的思想的理解,我们要掌握一个算法,不仅仅限于读懂,主要的是要理解老师的思路,学习老师的解决问题的方法。自己在写程序的时候,发现自己的知识太少了,特别是基础知识很多都是模模糊糊的一个概念,没有落实到真正的程序,所以自己写的时候也感到万分痛苦!
我以后一定会好好学习,学以致用!
目 录
一、实验目的................................................................................................................... 2 二、实验内容................................................................................................................... 2 三、实验环境................................................................................................................... 2 四、需求分析................................................................................................................... 2 五、概要设计................................................................................................................... 3
1、方案设计 ............................................................................................................. 3 2、数据结构说明 ...................................................................................................... 3 3、模块功能说明 ...................................................................................................... 4 六、详细设计及运行结果 ................................................................................................. 5
1、登陆界面 ............................................................................................................. 5 2、主界面 . ................................................................................................................ 5 3、录入模块 ............................................................................................................. 6 4、录入界面 ............................................................................................................. 7 5、打印学生信息界面 ............................................................................................... 7 6、更新学生信息界面 ............................................................................................... 8 7、查询宿舍信息界面 ............................................................................................... 8 8、统计宿舍信息界面 ............................................................................................... 9 9、学生宿舍排序 ...................................................................................................... 9 七、源程序 .................................................................................................................... 10 八、心得体会................................................................................................................. 28
学生宿舍管理系统
一、实验目的
1. 2. 3. 4.
熟练掌握线性表的基本操作在顺序存储和链式存储上的实现。、; 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 掌握线性表的动态分配顺序存储结构的定义和基本操作的实现;
通过实验帮助学生加深对C 语言的使用(特别是函数的参数调用、指针
类型的应用和链表的建立等各种基本操作)。
二、实验内容
我组设计的是“学生宿舍管理系统”,主要是针对住宿学生个人信息的管理,适用对象主要是学校,以方便学校对住宿学生的管理。包括学生的姓名、学号、性别、专业、班级等等。在编写过程中主要运用C 语言的基本知识有:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的调用与使用)等。
三、实验环境
台式计算机每人一台; 软件:Visual C++6.0;
四、需求分析
该程序是由C 语言编写的一个宿舍管理查询软件,本程序在Microsoft Visual C++ 6.0下运行,其主要功能是实现对学生信息的录入、添加、删除、修改、查询、统计。其中查询可以分别以姓名、学号、宿舍号为关键字查询学生信息。统计可以分别以学号、宿舍号、性别、班级、专业为关键字进行统计,并且输出信息按学号大小从小到大输出。
五、概要设计
1、方案设计
2、数据结构说明
程序中数据主要是学生信息和宿舍信息,具体属于类型如下: struct stu {
char name[20]; int num; char sex; int age; int grade; int nclass; char zhuanye[30]; };
struct dom
{
int bui_num; int floor_num; int room_num; int bed_num; struct stu st; }s[MAX],p;
3、模块功能说明
第一密码模块:调用cipher(),进行管理者的注册与登录操作。 第二录入模块:调用input_message(),对住宿学生信息进行录入。 第三添加模块:调用append_message(),对新来学生信息进行添加录入。 第四修改模块:调用revise_message(),对需修改学生的信息进行修改。 第五删除模块:调用delete_message(),对某一学生信息进行删除操作。
第六查询模块:调用find_message(),分别以姓名、学号、宿舍号对学生信息进行查询。 第七统计模块:调用census_message(),分别以学号、宿舍号、性别、班级、专业方式对学生信息进行统计,并按学号由小到大输出。
六、详细设计及运行结果
1、登陆界面
2、主界面
5、打印学生信息界面
7、查询宿舍信息界面
9、学生宿舍排序
七、源程序
#include #include "string.h"
#define MAX 10 #define
PRINT1
printf("---------------------------------------------------------------------------\n")
#define PRINT2 printf("学号--学生姓名--性别--年龄--年级--班级--专业--楼号--楼层号--房间号--床号\n\n") int sum; struct stu {
char name[20]; int num; char sex; int age; int grade; int nclass; char zhuanye[30]; };
struct dom {
int bui_num; int floor_num; int room_num; int bed_num; struct stu st;
}s[MAX],p;
/*保存信息*/
save_message()
{ FILE *fp;
int i;
if((fp=fopen("dom.txt","wt"))==NULL)
{
printf("读文件错误!\n");
return 0;
}
for(i=0;i
if(fwrite(&s[i],sizeof(struct dom),1,fp)!=1)
printf("写文件错误!\n");
fclose(fp);
}
/*输入模块*/
input_message()
{ int i=0;
//clrscr();
printf("\n\n 录入学生信息(最多%d个)\n",MAX);
printf(" ----------------------------\n");
do
{
printf("\n 第%d个学生\n\n",i+1);
printf("\n 学号: ");
scanf("%d",&s[i].st.num);
if(s[i].st.num==0) break;
printf("\n 学生姓名: ");
scanf("%s",s[i].st.name);
printf("\n 学生性别(男生用M 表示, 女生用F 表示):");
getchar();
scanf("%c",&s[i].st.sex);
printf("\n 学生年龄: ");
scanf("%d",&s[i].st.age);
printf("\n 学生年级: ");
scanf("%d",&s[i].st.grade);
printf("\n 学生班级: ");
scanf("%d",&s[i].st.nclass);
printf("\n 学生专业: ");
scanf("%s",&s[i].st.zhuanye);
printf("\n 宿舍楼号: ");
scanf("%d",&s[i].bui_num);
printf("\n 宿舍楼层号: ");
scanf("%d",&s[i].floor_num);
printf("\n 宿舍房间号: ");
scanf("%d",&s[i].room_num);
printf("\n 宿舍床号: ");
scanf("%d",&s[i].bed_num);
i++;
}while(i
printf("\n --%d个学生的信息输入完毕!--\n",i);
sum=i;
printf("\n 按任意键返回主菜单!");
getchar();
// bioskey(0);
return 0;
}
/*读取信息*/
int read_message()
{
FILE *fp;
int i=0;
if((fp=fopen("dom.txt","rt"))==NULL)
{
printf("\n\n*****暂时还没有任何信息,按任意键进入主菜单选择基本信息的录入!*****\n");
return 0;
}
while(!feof(fp))
{
fread(&s[i],sizeof(struct dom),1,fp);
i++;
}
fclose(fp);
return(i);
}
/*输出模块*/
output_message()
{ int i=0;
// clrscr();
printf("\n\n --学生信息表-- \n\n");
PRINT2;
PRINT1;
for(i=0;i
if(s[i].st.num!=0)
{
printf("%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i].st.num,s[i].st.name,s[i].st.sex,s[i].st.age,
s[i].st.grade,s[i].st.nclass,s[i].st.zhuanye,s[i].bui_num,s[i].floor_num,s[i].room_num,s[i].bed_num);
printf("\n");
// bioskey(0);
}
return 0; ///
}
/*添加学生信息*/
insert_message()
{int i=sum,flag=0;
char choice;
printf("\n\n 添加一个新同学\n");
printf(" ---------------\n");
do
{
printf("\n 新学号: ");
scanf("%d",&s[i].st.num);
printf("\n 学生姓名: ");
scanf("%s",s[i].st.name);
printf("\n 学生性别(男生用M 表示, 女生用F 表示):");
getchar();
scanf("%c",&s[i].st.sex);
printf("\n 学生年龄: ");
scanf("%d",&s[i].st.age);
printf("\n 学生年级: ");
scanf("%d",&s[i].st.grade);
printf("\n 学生班级: ");
scanf("%d",&s[i].st.nclass);
printf("\n 学生专业: ");
scanf("%s",s[i].st.zhuanye);
printf("\n 宿舍楼号: ");
scanf("%d",&s[i].bui_num);
printf("\n 宿舍楼层号: ");
scanf("%d",&s[i].floor_num);
printf("\n 宿舍房间号: ");
scanf("%d",&s[i].room_num);
printf("\n 宿舍床号: ");
scanf("%d",&s[i].bed_num);
sum++;
printf("\n 要继续吗?(Y/N)");
getchar();
scanf("%c",&choice);
if(choice=='y' || choice=='Y')
{
flag=1;
i++;
printf("\n 继续!\n");
}
else flag=0;
}while(flag==1);
printf("\n 按任意键返回主菜单!");
return 0;
}
/*删除模块*/
del_message()
{int flag,del_num,i,k;
char choice;
do
{printf("\n 输入要删除的学生学号: ");
scanf("%d",&del_num);
for(i=0;i
if(del_num==s[i].st.num)
for(k=i;k
s[k]=s[k+1];
sum--;
printf("\n\n 继续吗?(Y/N)");
getchar();
scanf("%c",&choice);
if(choice=='y' || choice=='Y')
{
flag=1;
printf("\n 继续!\n");
}
else flag=0;
}while(flag==1);
printf("\n\n 按任意键返回主菜单!");
getchar();
return 0;
}
/*修改模块*/
revise_message()
{int i=0,choices,revise_num,flag=0; char choice;
do
{
printf("\n 输入要修改的学生号: ");
scanf("%d",&revise_num);
for(i=0;i
if(s[i].st.num==revise_num)
{
printf("\n --学生信息--\n");
PRINT1;
PRINT2;
printf("%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i].st.num,s[i].st.name,s[i].st.sex,s[i].st.age,s[i].st.grade,s[i].st.nclass,s[i].st.zhuanye,s[i].bui_num,s[i].floor_num,s[i].room_num,s[i].bed_num);
printf("\n 您要修改哪一项?\n");
printf("\n 1.学号\n");
printf("\n 2.性别\n");
printf("\n 3.姓名\n");
printf("\n 4.年龄\n");
printf("\n 5.年级\n");
printf("\n 6.班级\n");
printf("\n 7.专业\n");
printf("\n 8.楼号\n");
printf("\n 9.楼层号\n");
printf("\n 10.房间号\n");
printf("\n 11.床号\n");
printf("\n 请选择(1-11): ");
scanf("%d",&choices);
switch(choices)
{
case 1:printf("\n 输入修改后的学号");
scanf("%d",&s[i].st.num);break;
case 2:printf("\n 输入修改后的姓名");
scanf("%s",s[i].st.name);break;
case 3:printf("\n 输入修改后的性别");
scanf("%s",s[i].st.sex);break;
case 4:printf("\n 输入修改后的年龄");
scanf("%d",&s[i].st.age);break;
case 5:printf("\n 输入修改后的年级");
scanf("%d",&s[i].st.grade);break;
case 6:printf("\n 输入修改后的班级");
scanf("%d",&s[i].st.nclass);break;
case 7:printf("\n 输入修改后的专业");
scanf("%s",&s[i].st.zhuanye);break;
case 8:printf("\n 输入修改后的楼号");
scanf("%d",&s[i].bui_num);break;
case 9:printf("\n 输入修改后的楼层号");
scanf("%d",&s[i].floor_num);break;
case 10:printf("\n 输入修改后的房间号");
scanf("%d",&s[i].room_num);break;
case 11:printf("\n 输入修改后的床号");
scanf("%d",&s[i].bed_num);break;
}
PRINT1;
PRINT2;
printf("%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i].st.num,s[i].st.name,s[i].st.sex,s[i].st.age,s[i].st.grade,s[i].st.nclass,s[i].st.zhuanye,s[i].bui_num,s[i].floor_num,s[i].room_num,s[i].bed_num);
break;
}
if(i==sum)
printf("\n 该学生不存在!");
// bioskey(0);
return 0;
/* printf("\n\n 继续修改吗?(Y/N)");
getchar();
scanf("%c",&choice);
if(choice=='y'|| choice=='Y')
{
flag=1;
printf("\n 继续!\n");
}
else flag=0; */
}while(flag==1);
getchar();
printf("\n 按任意键返回主菜单! ");
return 0;
}
/*更新模块*/
renew_message()
{
int choice;
do
{
printf("\n\n\n ***** printf(" 1. printf(" 2. printf(" 3. printf(" 0. printf(" scanf("%d",&choice);
switch(choice)
{
case 1:insert_message();break; case 2:del_message();break;
case 3:revise_message();break; case 0:break;
}
}while(choice!=0);
return 0;
}
更新学生信息*****\n\n"); 添加学生信息\n\n"); 删除学生信息\n\n"); 修改学生信息\n\n"); 返回主菜单\n\n"); 请选择(0-3): ");
inquire_name() /*按姓名查询*/
{
int i,j=0;
char inquire_name[10];
printf("\n 输入要查询的学生姓名: ");
scanf("%s",inquire_name);
for(i=0;i
if(strcmp(s[i].st.name,inquire_name)==0&&s[i].st.num!=0)
{
printf("\n --学生信息-- \n");
PRINT1;
PRINT2;
printf("%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i].st.num,s[i].st.name,s[i].st.sex,s[i].st.age,
s[i].st.grade,s[i].st.nclass,s[i].st.zhuanye,s[i].bui_num,s[i].floor_num,s[i].room_num,s[i].bed_num);
}
else j++;
if(j==sum)
printf("\n 该学生不存在!");
return 0;
}
int inquire_num() /*按学号查询*/
{
int i,j=0,inquire_num;
printf("\n 输入要查询的学生学号: ");
scanf("%d",&inquire_num);
for(i=0;i
if(inquire_num==s[i].st.num)
{
printf("\n --学生信息--\n");
PRINT1;
PRINT2;
printf("%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i].st.num,s[i].st.name,s[i].st.sex,s[i].st.age,
s[i].st.grade,s[i].st.nclass,s[i].st.zhuanye,s[i].bui_num,s[i].floor_num,s[i].room_num,s[i].bed_num);
}
else j++;
if(j==sum)
printf("\n 该学生不存在!");
return 0;
}
/*查询模块*/
inquire_message()
{int choice;
do
{
printf("\n\n *****查询学生信息*****\n\n");
printf(" 1.按学生姓名查询\n");
printf(" 2.按学生学号查询\n");
printf(" 0.回主菜单\n");
printf(" 请选择(0-2): ");
scanf("%d",&choice);
switch(choice)
{
case 1:inquire_name();break;
case 2:inquire_num();break;
case 0:break;
}
}while(choice!=0);
return 0;
}
count_person() /*学生住宿情况统计*/
{
int i,j=0,count_grade,count_nclass;
char count_zhuanye[20];
printf("\n 输入要统计的学生专业, 年级, 班级: ");
scanf("%10s %8d %8d",&count_zhuanye,&count_grade,&count_nclass);
printf("\n 住宿情况");
printf("\n -------------------------------\n");
printf("\n 姓名 学号 楼号 楼层号 房间号 床号 \n");
for(i=0;i
if(s[i].st.grade==count_grade&&s[i].st.nclass==count_nclass&&strcmp(s[i].st.zhuanye,count_zhuanye)==0)
printf("\n%10s%8d%8d%8d%8d%8d\n",s[i].st.name,s[i].st.num,s[i].bui_num,s[i].floor_num,
s[i].room_num,s[i].bed_num);
else j++;
if(j==sum)
printf("\n 该学生不存在!");
return 0;
}
/*统计模块*/
count_message()
{
int choice;
do
{
printf("\n\n *****统计住宿信息*****\n");
printf(" 1.学生住宿情况统计\n");
printf(" 0.返回主菜单\n");
printf(" 请选择(0-1): ");
scanf("%d",&choice);
switch(choice)
{
case 1:count_person();break;
case 0:break;
}
}while(choice!=0);
return 0;
}
sort_domitry() /*学生宿舍情况排序*/
{
int i,j ;
printf("\n 宿舍排序\n");
printf(" --------------------------------------------\n");
printf("\n 排序 姓名 学号 性别 楼号 楼层号 房间号\n");
for(i=0;i
{
for(j=i+1;j
if(s[i].bui_num
{
p=s[i];
s[i]=s[j];
s[j]=p;
}
else if(s[i].bui_num==s[j].bui_num)
if(s[i].floor_num
{
p=s[i];
s[i]=s[j];
s[j]=p;
}
else if(s[i].floor_num==s[j].floor_num)
if(s[i].room_num
{
p=s[i];
s[i]=s[j]; 床号
s[i]=p;
}
else if(s[i].room_num==s[j].room_num)
if(s[i].bed_num
{
p=s[i];
s[i]=s[j];
s[j]=p;
}
}
for(i=0;i
if(s[i].st.num!=0)
printf("\n%12d%8s%8d%8c%8d%8d%8d%6d\n\n",i+1,s[i].st.name,s[i].st.num,s[i].st.sex,s[i].bui_num,s[i].floor_num,s[i].room_num,s[i].bed_num);
return 0;
}
/*排序模块*/
sort_message()
{ int choice;
do
{
printf("\n *****宿舍排序*****\n");
printf(" 1.宿舍情况排序\n");
printf(" 0.返回主菜单!\n");
printf(" 请选择(0-1): ");
scanf("%d",&choice);
switch(choice)
{
case 1:sort_domitry();break;
case 0:break;
}
}
while(choice!=0);
return 0;
}
void main()
{
int choice;
sum=read_message();
// bioskey(0);
do
{
// clrscr();
printf("\n\n\n *****宿舍管理系统*****\n\n");
printf(" 1.录入学生信息\n\n");
printf(" 2.打印学生信息\n\n");
printf(" 3.更新学生信息\n\n");
printf(" 4.查询宿舍信息\n\n");
printf(" 5.统计宿舍信息\n\n");
printf(" 6.学生宿舍排序\n\n");
printf(" 0.退出系统\n\n");
printf(" 请选择(0-6):");
scanf("%d",&choice);
switch(choice)
{
case 1: input_message(); break; /*录入模块*/
case 2: output_message(); break; /*输出模块*/
case 3: renew_message(); break; /*更新模块*/
case 4: inquire_message(); break; /*查询模块*/
case 5: count_message(); break; /*统计模块*/
case 6: sort_message(); break; /*排序模块*/
; case 0: break; /*退出系统*/
}
}while(choice!=0);
save_message();
//save_message(sum)
printf("\n以上学生信息已保存!-(文件名:domitry.txt)\n");
}
八、心得体会
做了一个星期的程序设计终于做完了,在这次程序设计课中,真是让我获益匪浅,我突然发现写程序还挺有意思的。
通过这次的程序设计,发现一个程序设计就是算法与数据结构的结合体,自己也开始对程序产生了前所未有的兴趣,以前偷工减料的学习也不可能一下子写出一个程序出来,于是我就认真看老师写的程序,发现我们看懂了一个程序其实不难,难的是对于一个程序的思想的理解,我们要掌握一个算法,不仅仅限于读懂,主要的是要理解老师的思路,学习老师的解决问题的方法。自己在写程序的时候,发现自己的知识太少了,特别是基础知识很多都是模模糊糊的一个概念,没有落实到真正的程序,所以自己写的时候也感到万分痛苦!
我以后一定会好好学习,学以致用!