宿舍管理软件c语言版.docx
《宿舍管理软件c语言版.docx》由会员分享,可在线阅读,更多相关《宿舍管理软件c语言版.docx(26页珍藏版)》请在冰点文库上搜索。
宿舍管理软件c语言版
#include
#include
#include
#include
voidmenu();/*主菜单*/
voidsearchmenu();/*查询菜单*/
voidsearch();/*查询系统*/
intsearch_stuname(charstr[]);/*按姓名查询*/
intsearch_stunum(charstr[]);/*按学号查询*/
intsearch_number(charstr[]);/*按宿舍号查询*/
voidsort_stunum();/*按学号排序*/
intfind_stunum();/*增加学生信息时检查学号是否存在*/
intfind1_stunum();/*修改学生信息时检查学号是否存在*/
voidmodify_stuname();/*按姓名修改学生信息*/
voidmodify_stunum();/*按学号修改学生信息*/
voiddelete_stuname();/*按姓名删除学生信息*/
voiddelete_stunum();/*按学号删除学生信息*/
voidquit();/*退出系统*/
voidbound();/*画一条直线*/
intcheck();/*检查是否为第一次使用*/
typedefstructstudent
{
charstuname[31];
charstunum[11];
charnumber[5];
structstudent*next;
}STU;
FILE*fp;/*定义数据文件为全局变量*/
staticcharchoice;/*定义操作代码为全局静态变量*/
voidmenu()
{
do
{
system("cls");
/*printf("\t**********************************\n");*/
printf("\n\t\t\t宿舍管理系统\n");
/*printf("\t**********************************\n");*/
bound();
printf("\n\t\t1.显示所有学生信息\n");
printf("\t\t2.添加学生信息\n");
printf("\t\t3.查询学生信息\n");
printf("\t\t4.修改学生信息\n");
printf("\t\t5.删除学生信息\n");
printf("\t\t0.退出系统\n");
bound();
printf("\t\t请输入操作代码(0~5):
\t");
fflush(stdin);
choice=getchar();
}while(choice<'0'||choice>'5');
/*while(choice<'0'||choice>'5')
{printf("\t\t输入的操作代码无效,请重新输入:
");
fflush(stdin);
choice=getchar();
}*/
}
voiddisplay()/*显示所有学生的信息*/
{
STU*sturecord;
sturecord=(STU*)malloc(sizeof(STU));
if(check()==0)
return;
system("cls");
sort_stunum();
fp=fopen("record.dat","r");
if(fp==NULL)
{printf("文件读取失败!
\n");
return;
}
printf("\t%-10s\t%-10s\t%-5s\n","姓名","学号","宿舍号");
bound();
while(fread(sturecord,sizeof(STU),1,fp)!
=0)
{
printf("\t%-10s",sturecord->stuname);
printf("\t%-10s",sturecord->stunum);
printf("\t%-5s\n",sturecord->number);
}
fclose(fp);
printf("\t请按任意键返回主菜单:
");
getch();
menu();
}
voidaddrecord()/*增加学生信息*/
{
STU*sturecord;
charch;
system("cls");
sturecord=(STU*)malloc(sizeof(STU));
printf("\n\t请输入学生的姓名:
");
scanf("%s",sturecord->stuname);
printf("\t请输入学生的学号:
");
scanf("%s",sturecord->stunum);
if(find_stunum(sturecord->stunum)==1)
{addrecord();
return;
}
printf("\t请输入学生的宿舍号:
");
scanf("%s",sturecord->number);
bound();
printf("\t该学生信息如下:
\n");
printf("\t%-10s\t%-10s\t%-5s\n","姓名","学号","宿舍号");
printf("\t%-10s\t%-10s\t%-5s\n",sturecord->stuname,sturecord->stunum,sturecord->number);
printf("\t确认添加该信息吗?
(Y/N)\t");
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y')
{fp=fopen("record.dat","a");
if(fp!
=NULL)
{
fwrite(sturecord,sizeof(STU),1,fp);
printf("\t学生信息已增加!
\n");
free(sturecord);
}
else
{
printf("添加信息失败,请按任意键退出!
\n");
getch();
exit
(1);
}
fclose(fp);
}
else
{
menu();
return;
}
bound();
printf("\t输入y/Y继续增加学生信息,否则按任意键返回主菜单:
");
fflush(stdin);
ch=getchar();
fflush(stdin);
if(ch=='y'||ch=='Y')
addrecord();
else
menu();
return;
}
voidsearchmenu()/*查询菜单*/
{
system("cls");
printf("\t1.按姓名查询\n\n");
printf("\t2.按学号查询\n\n");
printf("\t3.按宿舍号查询\n\n");
printf("\t4.返回菜单\n");
bound();
}
voidsearch()/*查询系统*/
{
charch;
charstr[31];
if(check()==0)
return;
searchmenu();
printf("\t请输入查询类型:
\t");
fflush(stdin);
ch=getchar();
while(ch<'1'||ch>'4')
{
printf("\t输入的操作代码无效,请重新输入:
");
fflush(stdin);
ch=getchar();
}
switch(ch)
{case'1':
printf("\t请输入要查找学生的姓名:
");
scanf("%s",str);
if(search_stuname(str)==1)
{
bound();
printf("\t请按任意键返回");
getch();
break;
}
printf("\t该学生信息不存在,是否继续查找?
(Y/N)");
fflush(stdin);
ch=getchar();
if(ch=='Y'||ch=='y')
search();
break;
case'2':
printf("\t请输入要查找学生的学号:
");
scanf("%s",str);
if(search_stunum(str)==1)
{bound();
printf("\t请按任意键返回");
getch();
fflush(stdin);
break;
}
printf("\t该学生信息不存在,是否继续查找?
(Y/N)");
fflush(stdin);
ch=getchar();
if(ch=='Y'||ch=='y')
search();
break;
case'3':
printf("\t请输入要查找的宿舍号:
");
scanf("%s",str);
if(search_number(str)==1)
{
bound();
printf("\t请按任意键返回");
getch();
fflush(stdin);
break;
}
printf("\n\t该宿舍号不存在,是否继续查找?
(Y/N)");
fflush(stdin);
ch=getchar();
if(ch=='Y'||ch=='y')
search();
break;
}
menu();
}
intsearch_stuname(charstr[])/*按姓名查询*/
{inti=0;
STU*sturecord;
sturecord=(STU*)malloc(sizeof(STU));
fp=fopen("record.dat","r");
while(fread(sturecord,sizeof(STU),1,fp)!
=0)
{
if(strcmp(str,sturecord->stuname)==0)
{
printf("\t该学生信息如下:
\n");
printf("\t%-10s\t%-10s\t%-5s\n","姓名","学号","宿舍号");
printf("\t%-10s\t%-10s\t%-5s\n",sturecord->stuname,sturecord->stunum,sturecord->number);
i++;
}
}
fclose(fp);
if(i>0)
return1;
else
return0;
}
intsearch_stunum(charstr[])/*按学号查询*/
{
STU*sturecord;
sturecord=(STU*)malloc(sizeof(STU));
fp=fopen("record.dat","r");
while(fread(sturecord,sizeof(STU),1,fp)!
=0)
{
if(strcmp(str,sturecord->stunum)==0)
{
printf("\t该学生信息如下:
\n");
printf("\t%-10s\t%-10s\t%-5s\n","姓名","学号","宿舍号");
printf("\t%-10s\t%-10s\t%-5s\n",sturecord->stuname,sturecord->stunum,sturecord->number);
fclose(fp);
return1;
}
}
fclose(fp);
return0;
}
intsearch_number(charstr[])/*按宿舍号查询*/
{inti=0;
STU*sturecord;
sturecord=(STU*)malloc(sizeof(STU));
fp=fopen("record.dat","r");
printf("\t该宿舍的学生信息为:
\n");
printf("\t%-10s\t%-10s\t%-5s\n","姓名","学号","宿舍号");
while(fread(sturecord,sizeof(STU),1,fp)!
=0)
{
if(strcmp(str,sturecord->number)==0)
{printf("\t%-10s\t%-10s\t%-5s\n",sturecord->stuname,sturecord->stunum,sturecord->number);
i++;
}
}
fclose(fp);
if(i>0)
return1;
else
return0;
}
voidsort_stunum()/*按学号对所有学生信息排序*/
{
intcount;
STU*head,*p,*q,*r;
head=(STU*)malloc(sizeof(STU));
q=(STU*)malloc(sizeof(STU));
head->next=NULL;
fp=fopen("record.dat","r");
count=fread(q,sizeof(STU),1,fp);
while(count!
=0)
{
r=head->next;
p=head;
while(r!
=NULL&&strcmp(q->stunum,r->stunum)==1)
{
p=r;
r=r->next;
}
p->next=q;
q->next=r;
q=(STU*)malloc(sizeof(STU));
count=fread(q,sizeof(STU),1,fp);
}
fclose(fp);
p=head->next;
fp=fopen("record.dat","w");
while(p!
=NULL)
{
fwrite(p,sizeof(STU),1,fp);
p=p->next;
}
fclose(fp);
return;
}
intfind_stunum(charstr[])/*增加学生信息时检查学号是否存在*/
{STU*p;
p=(STU*)malloc(sizeof(STU));
fp=fopen("record.dat","a+");
while(fread(p,sizeof(STU),1,fp)!
=0)
{if(strcmp(str,p->stunum)==0)
{printf("\t该学生信息已存在,按任意键返回重新输入!
");
fclose(fp);
getch();
fflush(stdin);
return1;
}
}
fclose(fp);
return0;
}
intfind1_stunum(charstr[],STU*q,STU*p)/*修改学生信息时检查学号是否存在*/
{
while(q!
=NULL)
{if(q==p)
{
q=q->next;
continue;
}
if(strcmp(str,q->stunum)==0)
{printf("\t该学号已存在,请重新输入!
\n");
return1;
}
q=q->next;
}
return0;
}
voidmodify()/*修改系统*/
{
charch;
if(check()==0)
return;
system("cls");
printf("\n\t1.按姓名修改学生信息\n");
printf("\n\t2.按学号修改学生信息\n");
printf("\n\t3.返回主菜单\n");
bound();
printf("\n\t请选择(1~3):
\t");
fflush(stdin);
ch=getchar();
if(ch=='1')
{modify_stuname();
menu();
return;
}
if(ch=='2')
{modify_stunum();
menu();
return;
}
else
menu();
}
voidmodify_stuname()/*按姓名修改学生信息*/
{charch;
charstr[31];
STU*head,*p,*q;
head=(STU*)malloc(sizeof(STU));
q=head;
p=(STU*)malloc(sizeof(STU));
printf("\t请输入学生姓名:
");
scanf("%s",str);
while(search_stuname(str)==0)
{
printf("\t输入的学生姓名不存在,是否返回主菜单?
(y/n)");
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y')
return;
else
{
printf("\t请重新输入姓名:
");
scanf("%s",str);
}
}
fp=fopen("record.dat","r");
while(fread(p,sizeof(STU),1,fp)!
=0)
{q->next=p;
q=p;
p=(STU*)malloc(sizeof(STU));
}
q->next=NULL;
q=head->next;
p=head->next;
while(p!
=NULL)
{if(strcmp(str,p->stuname)==0)
{
do
{
printf("\t请重新输入该学生的学号:
");
scanf("%s",p->stunum);
}while(find1_stunum(p->stunum,q,p)==1);
printf("\t请重新输入该学生的姓名:
");
scanf("%s",p->stuname);
printf("\t请重新输入该学生的宿舍号:
");
scanf("%s",p->number);
}
p=p->next;
}
fclose(fp);
bound();
printf("\t学生信息已修改,确认保存吗?
(Y/N):
");
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y')
{p=head->next;
fp=fopen("record.dat","w");
while(p!
=NULL)
{
fwrite(p,sizeof(STU),1,fp);
p=p->next;
}
fclose(fp);
}
}
voidmodify_stunum()/*按学号修改学生信息*/
{charch;
charstr[31];
STU*head,*p,*q;
head=(STU*)malloc(sizeof(STU));
q=head;
p=(STU*)malloc(sizeof(STU));
printf("\t请输入学生学号:
");
scanf("%s",str);
while(search_stunum(str)==0)
{
printf("\t输入的学生学号不存在,是否返回主菜单?
");
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y')
return;
else
{
printf("\t请重新输入学号:
");
scanf("%s",str);
}
}
fp=fopen("record.dat","r");
while(fread(p,sizeof(STU),1,fp)!
=0)
{q->next=p;
q=p;
p=(STU*)malloc(sizeof(STU));
}
q->next=NULL;
q=head->next;
p=head->next;
while(p!
=NULL)
{if(strcmp(str,p->stunum)==0)
{
do
{
printf("\t请重新输入该学生的学号:
");
scanf("%s",p->stunum);
}while(find1_stunum(p->stunum,q,p)==1);
printf("\t请重新输入该学生的姓名:
");
scanf("%s",p->stuname);
printf("\t请重新输入该学生的宿舍号:
");
scanf("%s",p->number);
}
p=p->next;
}
fclose(fp);
bound();
printf("\t学生信息已修改,确认保存吗?
(Y/N):
");
fflush(stdin);
ch=getchar(