C语言课程设计学生宿舍管理系统.docx
《C语言课程设计学生宿舍管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生宿舍管理系统.docx(23页珍藏版)》请在冰豆网上搜索。
C语言课程设计学生宿舍管理系统
C语言课程设计报告
题目学牛宿舍管理系统
系部名称:
专业名称:
班级:
学号:
学生姓名
指导教师:
时间:
课程设计目的
1.设计一个ubuntu下的学生宿舍管理系统
2.掌握用C语言定义单链表结构,并实现其创建、插入、删除等基本操作。
、课程设计内容
用C语言编写“学生宿舍管理系统”,要求如下:
1.创建链表,录入数据。
2.数据的读写操作。
3.数据的更新操作。
4.数据的删除和插入。
5.请你要求对数据进行查找。
6.按要求排序。
7.设计总体菜单界面。
三、实验要求
1、录入数据
学生的基本信息,包括学号、姓名、性别、年龄、专业、班级等。
宿舍楼的基本信息,包括宿舍楼号、学生所住的房间号和宿舍床位号等。
2、数据存储
信息的录入要求用链表,把输入的信息要求存储到指定文件夹中,以便随
时查看,也可供程序调用,方便操作人员不用重复输入数据。
3、数据的更新
更新包括插入、删除、修改。
删除分根据学号删除和根据学生的楼层信息删除。
5、数据的查询
查询可以根据学号和宿舍信息不同方面进行查询,方便操作者使用
6、数据的排序
操作者可以使所输入的信息按学号排序。
7、数据的统计
按整体统计,统计所有学生人数,男生人数和女生人数。
四、概要设计
1•系统结构图(功能模块图)
2.功能模块说明:
(1).数据录入:
创建单链表,调用Initnode()函数申请头结点,在调用append(),
在调用Write_to_File()函数将信息写入文件中,
(2)插入模块:
先将文件信息读出,再调用
息。
(3)插入模块:
先将文件信息读出,再调用
需要的信息删除。
(4)修改模块:
先将文件信息读出,再调用
修改。
(5)查询模块:
先将文件信息读出,再调用
insert()函数,可以向文件中插入信del()函数,可以将输入错误或者modify()函数,将输入错误的信息search(),在search()中有调用两个
数,一个按照宿舍信息查询sushe_search(),需要楼号和宿舍号,一个按照生信息查询xuehao_search()需要学生学号或者姓名。
⑹排序模块:
先将文件信息读出,再调用sort(),按照学生学号排序,拍完续没有直接写入文件,如果要直接写入调用文件读入函数
Write_to_File().
⑺统计模块:
先将文件信息读出,再调用tongji()函数,统计了女生人数和男
生人数,还统计了总人数.
五•详细过程和运行结果:
删除模块
插入模块
开始
头插入学生信息
输入插入的学生信息
将其入栈,即将插入的学生信息插到了最前面
查找模块
「开始
修改模块
组织循环,扫描存储学生信息的链表表
修改学生信息
排序模块
匚开始
组织循环,扫描存
储学生信息的链表
选出学号最小的学生,与第
学生交换存储位置
在余下的学生中选出学号最小的学生与
第二个学生交换存储位置
以此类推,直至排序完成
统计模块
开始
组织循环,扫描存储学生信息的链表表
结束
六.参考文献:
《C语言程序设计》:
王曙燕
七.源代码
#include
#include
#inelude
〃#inelude
typedefstructStudent
int
num;
/*学号*/
char
name[15];
/*姓名*/
char
sex;
/*性别*/
char
zhuanye[20];
/*专业*/
int
lounum;
/*楼号*/
int
sushenum;
/*宿舍号*/
int
chuangnum;
/*床号*/
structStudent*next;
}Stu;
voidWrite_to_File(Stu*L)
{
FILE*fp;
Stu*p;
/*将信息写入文件*/
fp=fopen("sushe.txt","w");
if(fp==NULL)
{
printf("打开失败!
");
getchar();
getchar();
exit(0);
}
p=L->next;
while(p)
{
fprintf(fp,"%d%s%c%s%d%d%d\n",p->num,p->name,p->sex,p->zhuanye,p->lounum,p->sushenum,p->chuangnum);
p=p->next;
}
fclose(fp);
}
voidInitStu(Stu**h)/*创建头结点*/
{
(*h)=(Stu*)malloc(sizeof(Stu));
if(h==NULL)
{
printf("创建失败!
!
");
getchar();
getchar();
exit(0);
}
(*h)->next=NULL;
}
/*录入学生信息*/
voidappend()
{
Stu*head;
Stu*p,*q;
charch;
InitStu(&head);
q=head;
while
(1)
{
system("clear");
printf("请录入学生信息\n");
p=(Stu*)malloc(sizeof(Stu));
printf("\n学号:
");
scanf("%d",&p->num);
printf("\n姓名:
”);
seanf("%s",p->name);
printf("\n性别:
");
scanf(”%e",&p->sex);
printf("\n专业:
");
scanf("%s",p->zhuanye);
printf("\n楼号:
");
scanf("%d",&p->lounum);
printf("\n宿舍号:
");
scanf("%d",&p->sushenum);
printf("\n床号:
");
scanf("%d",&p->chuangnum);
p_>next=q_>next;
q_>next=p;
q=p;
printf(”按任意键继续录入,按0结束录入”);
getchar();ch=getchar();
if(ch=='0')
break;
}
Write_to_File(head);
/*读出文件信息*/
}
voidRead_from_File(Stu*h)
{
FILE*fp;
Stu*p,*q;
inti;
fp=fopen("sushe.txt","r");
if(fp==NULL)
{
printf("打开失败");
exit(0);
q=h;
while(!
feof(fp))
{
p=(Stu*)malloc(sizeof(Stu));
i=fscanf(fp,"%d%s%c%s%d%d%d\n",&p->num,p->name,&p->sex,
p->zhuanye,&p->lounum,&p->sushenum,&p->chuangnum);
if(i==EOF)
break;
q_>next=p;
q=p;
}
q->next=NULL;
fclose(fp);
Stu*head=NULL;
Stu*p;
InitStu(&head);
Read_from_File(head);
//printf("ok!
\n");
p=head->next;
system("clear");
if(!
p)
{
printf("无内容!
");
printf("\n按任意键键返回\n");
getchar();
getchar();
return0;
}
printf("学号姓名性别专业楼号宿舍号床号\n\n");
while(p)
{
printf("%-8d%-10s%-6c%-14s%-8d%-8d%-5d\n",p->num,p->name,p->sex,p->zh
uanye,
p->lounum,p->sushenum,p->chuangnum);
p=p->next;
}
printf("\n按任意键返回\n");
getchar();
getchar();
return1;
}
voiddel()/*删除学生信息*/
{
Stu*head;
Stu*p,*q;
charch,h;
intN;
intlounum,sushenum,chuangnum;
InitStu(&head);
Read_from_File(head);
q=head;
p=head->next;
do
{
system("clear");
printf("\n1.
根据学生学号删除
\n");
printf("\n2.
根据宿舍信息删除
\n");
printf("\n
请选择删除方式:
:
");
scanf(”%c",&ch);
while
(1){
if(ch=='1')
{
printf("\n请输入学生学号:
”);
scanf("%d",&N);
while(p)
{
if(p->num==N)
{
q_>next=p->next;
printf(”删除成功!
");break;
}
q=p;
p=p->next;
}
if(p==NULL)
{
printf("\n未找到此学生");
break;
}else
free(p);
}
}
elseif(ch==2)
{
printf("\n请输入宿舍信息(楼号宿舍床号):
”);
scanf("%d%d%d",&lounum,&sushenum,&chuangnum);
while(p!
=NULL)
{
&&
if(p->lounum==lounum&&p->sushenum==sushenum
p->chuangnum)
{
q_>next=p->next;
printf(”删除成功!
");
break;
}
q=p;
p=p->next;
}
if(p==NULL)
{
printf("未找到此学生”);
break;
}else
{
free(p);
}
}
break;
}
printf("\n\n是否继续:
Y/N?
");
scanf(”%c",&h);
}while(h=='Y'||h=='y');
Write_to_File(head);
}
voidinsert()/*用头插法插入学生信息*/
{
Stu*p,*head;
charch;
InitStu(&head);
Read_from_File(head);
system("clear");
do
{
p=(Stu*)malloc(sizeof(Stu));
p->next=NULL;
:
\n");
printf("\t\t请输入插入的学生信息
printf("\t学号:
”);
scanf("%d",&p->num);
printf("\n\t姓名:
");
scanf("%s",p->name);
printf("\n\t性别:
");
scanf(”%c",&p->sex);
printf("\n\t专业:
”);
seanf("%s",p->zhuanye);
printf("\n\t楼号:
");
scanf("%d",&p->lounum);
printf("\n\t宿舍号:
");
scanf("%d",&p->sushenum);
printf("\n\t床号:
");
scanf("%d",&p->chuangnum);
p->next=head->next;
head->next=p;
printf("\n\n是否继续插入?
Y/N");
scanf(”%c",&ch);
}while(ch=='y'||ch=='Y');
Write_to_File(head);
}
voidmodify()/*修改学生信息(按学号修改)*/
{
Stu*head;
Stu*p;
charch;
intN;
InitStu(&head);
Read_from_File(head);
system("clear");
printf("\n\n请输入修改的学生学号:
”);
scanf("%d",&N);
p=head->next;
do
{
while(p!
=NULL)
{
if(p->num==N){
system("clear");
:
\n");
printf("\n请输入新的学生信息
printf("\n学号:
”);
scanf("%d",&p->num);
printf("\n姓名:
");
scanf("%s",p->name);
printf("\n性别:
");
scanf("%c",&p->sex);
printf("\n专业:
");
scanf("%s",p->zhuanye);
printf("\n楼号:
");
scanf("%d",&p->lounum);
printf("\n宿舍号:
");
scanf("%d",&p->sushenum);
printf("\n床号:
”);
seanf("%d",&p->chuangnum);break;
}
p=p->next;
}
if(p==NULL)
printf("\n未找到此学生”);
else
{
printf("修改成功\n");
}
printf("\n\n继续修改?
Y/N");
scanf(”%c",&ch);
}while(ch=='y'||ch=='Y');
Write_to_File(head);
/*按照学生学号查找*/
voidxuehao_search(Stu*head){
intnum;
Stu*p;
charch;
p=head->next;
do
{
system("clear");
printf("\n请输入要查找的学生学号:
”);
scanf("%d",&num);
while(p!
=NULL)
{
if(p->num==num)
{
床号
printf(”学号姓名性别专业楼号宿舍号
\n\n");
printf("%-8d%-8s%-4c%-8s%-8d%-8d%-5d\n",p->num,p->name,p->sex,p->zhua
nye,
p->lounum,p->sushenum,p->chuangnum);
break;
}
p=p->next;
if(p==NULL)
printf("\n未找到此学生");printf("\n\n继续查找?
Y/N");
scanf("%s",&ch);
}while(ch=='Y'||ch=='y');
voidsushe_search(Stu*head)
{
intlounum,sushenum,chuangnum;
Stu*p;
charch;
p=head->next;
do
{
system("clear");
printf("\n请输入要查找的学生宿舍信息
printf("\n楼号:
”);
scanf("%d",&lounum);
/*按照宿舍信息查找*/
(楼号宿舍床号):
”);
printf("\n宿舍号:
");
scanf("%d",&sushenum);
printf("\n床号:
”);
scanf("%d",&chuangnum);
while(p!
=NULL)
{
if(p->lounum==lounum&&p->sushenum==sushenum
&&p->chuangnum==chuangnum)
{
printf(”学号姓名性别专业楼号宿舍号床号\n\n");
printf("%-8d%-8s%-4c%-8s%-8d%-8d%-5d\n",p->num,p->name,p->sex,p->zhuanye,
p->lounum,p->sushenum,p->chuangnum);break;
}
p=p->next;
}
if(p==NULL)
printf("\n未找到此学生”);
printf("\n\n是否继续?
Y/N");
scanf("%s",&ch);
}while(ch=='y'||ch=='Y');
}
/*查找学生信息*/
voidSearch()
{
intchoose;
Stu*head;
InitStu(&head);
Read_from_File(head);
system("clear");
printf("\n1.
根据宿舍信息查找
printf("\n2.
根据学生学号查找
printf("\n3.
退出.\n\n");
printf("\n
请选择查找方式:
")
scanf("%d",&choose);
switch(choose)
.");
.");
{
case1:
sushe_search(head);break;
case2:
xuehao_search(head);
break;
case3:
break;
}
}
voidsort()/*将学生信息按学号排序
{
Stu*head;
Stu*i,*j,*k;
Stu*m,*n;
Stu*temp;
int1=0;
InitStu(&head);
//冒泡排序法
Read_from_File(head);
for(m=head,i=head->next;i;m=i,i=i->next)
{
k=i;
for(n=i,j=i->next;j;n=j,j=j->next){
if(j->numnum)
k=j;
break;
}
}
if(i!
=k)
{
m->next=j;
n->next=i;
temp=i->next;
i->next=j->next;
j->next=temp;
i=head;
}
}
system("clear");
printf("\n\n输入学生信息:
\n\n");
i=head->next;
printf("学号姓名性别专业楼号宿舍号床号\n\n");
while(i)
{
printf("%-8d%-8s%-4c%-8s%-8d%-8d%-5d\n",i->num,i->name,i->sex.
i->zhuanye,
i->lounum,i->sushenum,i->chuangnum);i=i->next;
}
printf("\n按任意键返回r);
getchar();
getchar();
}
/*统计学生信息*/
voidtongji()
{
Stu*head,*p;
intCount1,Count2;
InitStu(&head);
Read_from_File(head);
system("clear");
p=head->next;
Count1=O;
Count2=0;
while(p!
=NULL)
{
if(p->sex=='w'||p_>sex==W)
{
Count1++;
}
else
{
Count2++;
}
p=p->next;
}
printf("\t
女生总数
:
%d\n
",Count1);
printf("\t
男生总数
:
%d\n
",Count2);
printf("\t
学生总数
:
%d\n
",Count1+Count2);
printf("\t按任意键返回rj;
getchar();
getchar();
}voidmain()
{
intchoice;
charch;
while
(1)
{
system("clear");
printf("\n学生宿舍管理系统\n");
printf("=========================================\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(”7.排序学生信息\n\n");
printf("8.统计学生信息\n\n”);
printf("0.退出系统\n");
printf("==========================================\n");
printf("请选择0-8:
\n");
printf("\n请选择要进行的操作:
”);
scanf("%d",&choice);
switch(choice)
{
case1:
append();
break;
case2:
del();
break;
case3:
insert();break;
case4:
modify。
;
break;
case5:
display。
;break;
case6:
Search。
;break;
case7:
sort();break;
case8:
tongji();
break;
case0:
(Y/N)");
printf("\n\t\t确定退出?
scanf(”%c",&ch);
if(ch=='Y'||ch=='y')
exit(0);
if(ch=='N'||ch=='n')
{
system("clear");
}
}
}
}