资源描述
-!
C语言程序设计报告
题 目:宿舍管理系统
院系名称:电子工程学院
专业名称:计算机科学与技术
班 级:1001
学生姓名:XXX
学号(8位):13
指导教师:XXX
设计起止时间:2011年6月22日~2011年6月30日
一. 设计目的
学生宿舍管理系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档的数据的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工一条条去查找,这样不但麻烦还浪费了许多时间,效率也比较低。当今社会是飞速进步的而世界,原始的记录方式已经被社会所淘汰,计算机化管理正是适应时代的产物。信息世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并取代旧技术。21世纪的今天,信息社会占着主流地位,,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。故随着宿舍需要管理的信息快速增长,建立一个宿舍管理系统可使宿舍管理人员的管理工作系统化、规范化、自动化,大大提高管理效率。
二. 设计内容
1.录入学生信息
2.显示学生信息
3.插入学生信息
4.修改学生信息
5.删除学生信息
6.排序学生信息
7.统计学生信息
8.管理员密码
三.概要设计
1.录入学生信息将信息保存至文件中
2.从文件中读取信息显示出学生信息
3. 从文件中读取信息存至单链表中,传递头指针从而修改学生信息,再将修改完成的学生信息保存至文件中
4. 从文件中读取信息存至单链表中,传递头指针从然后用冒泡法排序学生信息,再将修改完成的学生信息保存至文件中
5.统计学生信息按照宿舍号、楼层、楼号分别统计出人数
6.管理员进入此系统需输入密码,而学生进入则不需要
1.功能模块图;
主函数
密码
管理员
文件
存入单链表
录入
显示
插入
删除
修改
排序
存入文件
统计
学生
2.各个模块详细的功能描述。
1.录入学生信息
录入学生信息将信息保存至文件中
2.显示学生信息
从文件中读取信息显示出学生信息
3.插入学生信息
从文件中读取信息存至单链表中,传递头指针从而插入学生信息,再将修改完成的学生信息保存至文件中
4.修改学生信息
从文件中读取信息存至单链表中,传递头指针从而修改学生信息,再将修改完成的学生信息保存至文件中
5.删除学生信息
从文件中读取信息存至单链表中,传递头指针从而删除学生信息,再将修改完成的学生信息保存至文件中
6.排序学生信息
从文件中读取信息存至单链表中,传递头指针从然后用冒泡法排序学生信息,再将修改完成的学生信息保存至文件中
7.统计学生信息
统计学生信息按照宿舍号、楼层、楼号分别统计出人数
四.测试数据及运行结果
1.正常测试数据和运行结果
要求提供3组正常测试数据和运行结果
排序
查找
2.异常测试数据及运行结果
要求提供2组异常测试数据和运行结果
五.调试情况,设计技巧及体会
1.改进方案
对自己的设计进行评价,指出合理和不足之处,提出改进方案; 管理员密码不精致,会被管理员以外的人看到保密性不好。插入、删除、修改等函数太过繁琐。
2.体会
对设计及调试过程的心得体会:
在这一周多的实习中,让我对C语言有了更深刻的认识,不但复习了原来所学的知识,更对新的知识有了了解。在调试过程中,通过自己学习,寻求老师、同学的帮助解决了许多不懂的问题。
六.参考文献
C语言程序设计(第二版)
七.附录:
源代码(电子版)
#include
#include
#include
#include
#include
#include
#define P "学号:%-8ld姓名:%-8s班级:%-10s楼号:%-3s楼层:%-3s宿舍号:%-3s\n",p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum
#define N sizeof(struct stud)
manager();
main();
student();
struct stud
{
long num;
char name[20];
char classes[20];
char bnum[5];
char fnum[5];
char rnum[5];
struct stud *next;
};
struct node
{
char mima[10];
struct node *next;
};
/*********************************************************************************************************/
// 录入学生信息
/*********************************************************************************************************/
struct stud *input_message()
{
struct stud *p1,*p2,*head;
FILE *fp;
fp=fopen("student_message.txt","wt");
head=p2=(struct stud *)malloc(N); /*head p2指向头结点*/
printf("请输入 学号 姓名 班级 楼号 楼层 宿舍号(输入0结束)\n");
p1=(struct stud *)malloc(N); /*p1指向第一个结点*/
scanf("%ld %s %s %s %s %s",&p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum);
if(p1->num!=0)
fprintf(fp,"%ld %s %s %s %s %s\n",p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum);
while(p1->num!=0)
{
p2->next=p1; /*将新结点连接到表尾*/
p2=p1; /*p2指向新的表尾*/
p1=(struct stud *)malloc(N); /*p1指向新申请的结点*/
scanf("%ld %s %s %s %s %s",&p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum);
if(p1->num!=0)
fprintf(fp,"%ld %s %s %s %s %s\n",p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum);
}
fclose(fp);
p2->next=NULL; /*表尾结点next置空*/
free(p1); /*释放无效结点*/
return head;
}
/*********************************************************************************************************/
// 将文件中的信息存入单链表
/*********************************************************************************************************/
struct stud *inread() /*将文件中的信息存入单链表*/
{
struct stud *head,*p,*p1;
FILE *fp;
fp=fopen("student_message.txt","rt");
if(fp==NULL)
{
printf("读出文件出错,按任意键退出");
exit(1);
}
head=(struct stud *)malloc(N);
head->next=NULL;
p=head;
while(!feof(fp))
{
p1=(struct stud*)malloc(N);
fscanf(fp,"%ld %s %s %s %s %s\n",&p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum);
p->next=p1; /*连接结点*/
p=p1;
}
p->next=NULL;
fclose(fp);
return head;
}
/*********************************************************************************************************/
// 显示学生信息
/*********************************************************************************************************/
revise_message()
{
FILE *fp;
struct stud *p;
int n=0,a,fsize;
p=(struct stud *)malloc(N);
fp=fopen("student_message.txt","rt");
if(fp==NULL)
{
printf("\n 打开文件失败!");
exit(1);
}
while(!feof(fp)) /*文件未结束执行循环*/
{
a=fileno(fp);
fsize=filelength(a); /*判断文件大小 */
if(fsize==0)
break;
fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);
printf(P);
n=1;
}
fclose(fp);
if(n==0) printf("无记录!!!\n");
}
/*********************************************************************************************************/
// 将单链表的信息保存至文件中
/*********************************************************************************************************/
baocun(struct stud *p)
{
struct stud *p1;
FILE *fp;
fp=fopen("student_message.txt","wt");
if(fp==NULL)
{
printf("写入文件出错,按任意键退出");
exit(1);
}
for(p1=p->next;p1!=NULL;p1=p1->next)
fprintf(fp,"%ld %s %s %s %s %s\n",p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum);
fclose(fp);
}
/*********************************************************************************************************/
// 查询学生信息
/*********************************************************************************************************/
find_message()
{
long nnum;
int a,b,n,m;
FILE *fp;
struct stud *p;
fp=fopen("student_message.txt","rt");
p=(struct stud *)malloc(N);
system("cls");
printf("\n\n\n\n");
printf(" *********************************** \n");
printf(" 欢迎进入宿舍管理系统 \n");
printf(" *********************************** \n");
printf("\n 1.返回上一级 \n");
printf("\n 1.按学生学号查找 \n");
printf("\n 2.按学生姓名查找 \n");
printf("\n 3.按宿舍号查找 \n");
printf("\n\n\n");
printf("请选择:");
scanf("%d",&b);
printf("\n\n\n");
// 按学生学生学号
if(b==1)
{
printf("\n请输入要查找的人的学号:\n");
scanf("%ld",&nnum);
while(!feof(fp))
{
fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);
if(p->num==nnum)
{
printf(P);
a=1;
} /*标志*/
}
if(a!=1) printf("\n没有找到此人!!!!\n");
}
// 按学生姓名查找
if(b==2)
{
char nname[20];
printf("\n请输入要查找的人的姓名:");
scanf("%s",&nname);
while(!feof(fp))
{
fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);
n=strcmp(p->name,nname);
if(n==0)
{
printf(P);
a=1;}/*标志*/
}
if(a!=1) printf("\n没有找到此人!!!!\n");
}
if(b==3)
{
char nrnum[20];
printf("\n请输入要查找的宿舍号:");
scanf("%s",&nrnum);
while(!feof(fp))
{
fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);
m=strcmp(p->rnum,nrnum);
if(m==0)
{
printf(P);
a=1;}/*标志*/
}
if(a!=1) printf("\n没有找到此宿舍!!!!\n");
}
if(b==0)
manager();
}
/*********************************************************************************************************/
// 删除学生信息
/*********************************************************************************************************/
delete_message(struct stud *p0)
{
struct stud *p;
long nnum;
int a;
p=p0->next;
printf("请输入要删除的人的学号:");
scanf("%ld",&nnum);
while(p!=NULL)
{
if(p->num==nnum)
{
p0->next=p->next; /*后续结点接到前面的结点上*/
printf("已删除此人!!!!");
a=1; /*标志常量*/
}
p0=p; /*推移指针*/
p=p->next;
}
if(a!=1)
printf("没有找到要删除的人!!!!");
}
/*********************************************************************************************************/
// 插入和修改学生信息
/*********************************************************************************************************/
change_message(struct stud *p0)
{
long nnum;
int a,b;
system("cls");
printf("\n\n\n\n");
printf(" *********************************** \n");
printf(" 欢迎进入宿舍管理系统 \n");
printf(" *********************************** \n");
printf("\n 0.返回上一级 \n");
printf("\n 1.插入学生信息 \n");
printf("\n 2.修改学生信息 \n");
printf("\n\n\n");
printf("请选择:");
scanf("%d",&b);
printf("\n\n\n");
if(b==1)
{
struct stud *p;
p=(struct stud *)malloc(N);
printf("请输入要插入的学号 姓名 班级 楼号 楼层 宿舍号\n");
scanf("%ld %s %s %s %s %s",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);
p->next=p0->next; /*后续结点连接到新结点后*/
p0->next=p; /*此时新接点处在头的位置*/
}
if(b==2)
{
printf("请输入要修改的人的学号:");
scanf("%ld",&nnum);
while(p0->next!=NULL)
{
p0=p0->next; /*指针后移*/
if(p0->num==nnum)
{
printf("请修改此人的姓名 班级 楼号 楼层 宿舍号:");
scanf("%s %s %s %s %s",p0->name,p0->classes,p0->bnum,p0->fnum,p0->rnum);
printf("\n修改成功!!!!\n");
a=1;
} /*标志*/
}
if(a!=1) printf("\n没有找到此人!!!!\n");
}
if(b==0)
manager();
}
/*********************************************************************************************************/
// 统计学生信息
/*********************************************************************************************************/
dorm_message()
{
int a,b,m;
FILE *fp;
struct stud *p;
fp=fopen("student_message.txt","rt");
p=(struct stud *)malloc(N);
a=0;
system("cls");
printf("\n\n\n\n");
printf(" *********************************** \n");
printf(" 欢迎进入宿舍管理系统 \n");
printf(" *********************************** \n");
printf("\n 0.返回上一级 \n");
printf("\n 1.输入楼号统计人数 \n");
printf("\n 2.输入楼层号统计人数 \n");
printf("\n 3.输入宿舍号统计人数 \n");
printf("\n\n\n");
printf("请选择:");
scanf("%d",&b);
printf("\n\n\n");
// 按楼号统计
if(b==1)
{
char nbnum[20];
printf("\n请输入要统计的楼号:\n");
scanf("%s",&nbnum);
while(!feof(fp))
{
fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);
m=strcmp(p->bnum,nbnum);
if(m==0)
{
printf(P);
a++;
}
} /*标志*/
printf("\n该楼共有%d人\n",a);
}
// 按楼层号统计
if(b==2)
{
char nfnum[20];
printf("\n请输入要统计的楼层号:\n");
scanf("%s",&nfnum);
while(!feof(fp))
{
fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);
m=strcmp(p->fnum,nfnum);
if(m==0)
{
printf(P);
a++;
}
} /*标志*/
printf("\n该楼层共有%d人\n",a);
}
// 按宿舍号统计
if(b==3)
{
char nrnum[20];
printf("\n请输入要统计的宿舍号:\n");
scanf("%s",&nrnum);
while(!feof(fp))
{
fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);
m=strcmp(p->rnum,nrnum);
if(m==0)
{
printf(P);
a++;
}
} /*标志*/
printf("\n该宿舍共有%d人\n",a);
}
if(b==0)
manager();
}
/*********************************************************************************************************/
// 排序学生信息
/*********************************************************************************************************/
paixu(struct stud *p0, struct stud *p1, struct stud *p2)
{
p0->next = p2;
p1->next = p2->next;
p2->next = p1;
}
sort_message(struct stud *p0) /*传递头指针*/
{
int i,a;
int flag;
struct stud *p=NULL;
system("cls");
printf("\n\n\n\n");
printf(" *********************************** \n");
printf(" 欢迎进入宿舍管理系统 \n");
printf(" *********************************** \n");
printf("\n 0.返回上一级 \n");
printf("\n 1.升序排序 \n");
printf("\n 2.降序排序 \n");
printf("\n\n\n");
printf("请选择:");
scanf("%d",&a);
printf("\n\n\n");
if(a==1)
{
for (i=0; ; i++)
{
flag = 0;
for (p=p0; p->next->next != NULL; p=p->next) /*冒泡排序*/
{
if (p->next->num > p->next->next->num)
{
flag = 1;
paixu(p, p->next, p->next->next);
}
}
if (flag == 0)
{
printf("\n排序成功!!!!\n");break;
}
}
}
if(a==2)
{
for (i=0; ; i++)
{
flag = 0;
for (p=p0; p->next->next != NULL; p=p->next)
{
if (p->next->num < p->next->next->num)
{
flag = 1;
paixu(p, p->next, p->next->next);
}
}
if (flag == 0)
{
printf("\n排序成功!!!!\n");break;
}
}
}
if(a==0)
manager();
}
/*********************************************************************************************************/
// 管理员密码
/*********************************************************************************************************/
mima()
{
int n;
int a=3;
struct node *p;
char rmima[10];
FILE *fp;
fp=fopen("mima_message.txt","rt");
p=(struct node *)malloc(sizeof(struct node));
while(!feof(fp))
{
for(;a!=0;)
{printf("请输入密码:\n");
scanf("%s",rmima);
fscanf(fp,"%s\n",&p->mima);
n=strcmp(p->mima,rmima);
if(n==0)
{
manager();
}
if(n!=0)
printf("\n密码错误,还有%d次机会\n",a-1);
a--;
}
}
}
void nmima()
{
FILE *fp;
char nmima[10];
struct node *p;
p=(struct nod
展开阅读全文
相关搜索