这个只是简单的系统,只有一个关系表。如果你是为了应付老师则足矣,如果是为了优秀,那就要自己添加更多的关系表和功能块,比如可以再添加宿舍表,通过这个关系表,可以查看,这个宿舍有没有空床位;当给宿舍添加学生时,遇到宿舍爆满,就会添加失败等功能。
之前我发布上去的时候市可以运行的,后来可能是版本更新对语法要求更高,导致编译不过,现在已经对代码做了修改了。
以下为代码**:**
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include "conio.h"
#include "windows.h"
#define MAX 1000
/*结构体类型*/
typedef struct
{
int num;/*学号*/
char name[20];/*姓名*/
char sex[5];/*性别*/
int age;/*年龄*/
char studentclass[20];/*班级*/
int dorm;/*宿舍号*/
}STUDENTS;
//查找指针
typedef struct Points
{
int a;
struct Points *points;
}Points;
char xiugai[10]="修改";
char chaxun[10]="查询";
char xuehao[]="学号";
char xingming[]="姓名";
char xingbie[]="性别";
char nianling[]="年龄";
char banji[]="班级";
char sushe[]="宿舍";
/*共用的功能块 */
void pause(){
int i;
printf("\n\n按任意键加回车返回主菜单!");
scanf("%d",&i);
getchar();
}
void print(STUDENTS stu[],int point){
printf("\n\n\n学号:%d,姓名:%s,性别:%s,年龄:%d,班级:%s,宿舍号: %d\n",
stu[point].num,stu[point].name,stu[point].sex,stu[point].age,stu[point].studentclass,stu[point].dorm);
}
void printfNotFound(){
printf("找不到该数据\n");
}
void printSearch(STUDENTS stu[],int i){
printf(" %7d%11s%10s%10d%12s%12d\n\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].dorm);
}
void printHead(){
printf(" -------------------------------------------------------------------------------\n");
printf(" -------------------------------------------------------------------------------\n");
printf(" 学号: 姓名: 性别: 年龄: 班级: 宿舍号: \n");
printf(" -------------------------------------------------------------------------------\n");
printf(" -------------------------------------------------------------------------------\n\n\n");
}
//默认继续
int a=1;
void selectOperate(){
button:
printf("继续操作请按1,返回主菜单请按0 ");
scanf("%d",&a);
if(!(a==1||a==0))
{
printf("请输入正确的指令");
goto button;
}
}
//读取文件,返回的是总个数
int read_file(STUDENTS stu[])
{
FILE *fp;
int point=-1;
fp=fopen("stu.txt","rt");
if(fp==NULL)
{
printf("\n\n*****库存文件不存在!请创建");
return 0;
}
while(!feof(fp))
{
point++;
fread(&stu[point],sizeof(STUDENTS),1,fp);
}
fclose(fp);
return point;
}
//存储数据到文件中
void save_file(STUDENTS stu[],int sum)//sum是总个数
{
FILE *fp;
int i;
if((fp=fopen("temp.txt","w"))==NULL)
{
printf("写文件错误!\n");
return;
}
for(i=0;i<sum;i++)
if(fwrite(&stu[i],sizeof(STUDENTS),1,fp)!=1)
printf("写文件错误!\n");
fclose(fp);
remove("stu.txt");
rename("temp.txt","stu.txt");
}
/*创建学生信息*/
//返回的是总数
int input(STUDENTS stu[],int sum)
{
int x;
for(;sum<MAX;sum++)
{
system("cls");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printf(" ▄ ▄\n");
printf(" ▄ 创建学生宿舍信息 ▄\n");
printf(" ▄ ▄\n");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printf("\n\n 录入学生信息 (最多%d个)\n",MAX);
printf(" ----------------------------\n");
printf("\n 第%d个学生\n",sum+1);
printf("\n 请输入学生的学号:");
scanf("%d",&stu[sum].num);
printf("\n 请输入学生的姓名:");
scanf("%s",stu[sum].name);
printf("\n 请输入学生的性别:");
scanf("%s",stu[sum].sex);
printf("\n 请输入学生的年龄:");
scanf("%d",&stu[sum].age);
printf("\n 请输入学生的班级:");
scanf("%s",stu[sum].studentclass);
printf("\n 请输入学生的宿舍号:");
scanf("%d",&stu[sum].dorm);
printf(" 创建成功!");
//选择操作
selectOperate();
if(a==0)
return sum+1;
}
return sum+1;
}
/*打印学生信息*/
void output(STUDENTS stu[],int sum)
{
int i;
system("cls");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printf(" ▄ ▄\n");
printf(" ▄ 打印学生宿舍信息 ▄\n");
printf(" ▄ ▄\n");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printHead();
for(i=0;i<sum;i++)
printSearch(stu,i);
pause();
}
/*排序 */
/*复制student*/
//将排好的装在一个新的students数组里 ,不要存到文件中
void cpStu(STUDENTS stu0[],STUDENTS stu[],int sum) {
int i;
for(i=0;i<sum;i++){
stu[i].num=stu0[i].num;
strcpy(stu[i].name,stu0[i].name);
strcpy(stu[i].sex,stu0[i].sex);
stu[i].age=stu0[i].age;
strcpy(stu[i].studentclass,stu0[i].studentclass);
stu[i].dorm=stu0[i].dorm;
}
}
/*对数据元组排序*/
void exchangeData(STUDENTS *stu1,STUDENTS *stu2){
stu1->num=stu2->num;
stu1->dorm=stu2->dorm;
stu1->age=stu2->age;
strcpy(stu1->name,stu2->name);
strcpy(stu1->sex,stu2->sex);
strcpy(stu1->studentclass,stu2->studentclass);
}
int selectSort(){
int choice;
printf("\n\n\n ********请您选择条件进行排序********\n\n");
printf(" 1. 学号\n\n");
printf(" 2. 班级\n\n");
printf(" 3. 宿舍号\n\n");
printf(" 4. 姓名\n\n");
printf(" 0. 返回主菜单\n\n");
printf(" 请选择(0-3):");
scanf("%d",&choice);
return choice;
}
/*根据宿舍号从小到大排序 冒泡*/
void sortByDorm(STUDENTS stu0[],int sum,STUDENTS stup[])
{
STUDENTS stu1; //中间变量
int i,j;
cpStu(stu0,stup,sum);
for(i=0;i<sum-1;i++)
for(j=0;j<sum-1-i;j++)
if(stup[j].dorm>stup[j+1].dorm)
{
exchangeData(&stu1,&stup[j]);
exchangeData(&stup[j],&stup[j+1]);
exchangeData(&stup[j+1],&stu1);
}
}
/*根据班级从小到大排序 选择*/
void sortByClass(STUDENTS stu0[],int sum,STUDENTS stup[])
{
STUDENTS stu1; //中间变量
int i,j,k;
cpStu(stu0,stup,sum);
for(i=0;i<sum-1;i++)
{
k=i;
for(j=i+1;j<sum;j++)
if(strcmp(stup[k].studentclass,stup[j].studentclass)>0)
k=j;
if(k!=i)
{
exchangeData(&stu1,&stup[i]);
exchangeData(&stup[i],&stup[k]);
exchangeData(&stup[k],&stu1);
}
}
}
/*根据姓名从大到小排序 折半插入排序*/
//因为这里是从stu[1]开始操作的,所以得再创个中间变量
void sortByName(STUDENTS stu0[],int sum,STUDENTS stup[])
{
STUDENTS stu1; //中间变量
STUDENTS stu[1000];
int i,j,low,high,mid;
for(i=0;i<sum;i++){
stu[i+1].num=stu0[i].num;
strcpy(stu[i+1].name,stu0[i].name);
strcpy(stu[i+1].sex,stu0[i].sex);
stu[i+1].age=stu0[i].age;
strcpy(stu[i+1].studentclass,stu0[i].studentclass);
stu[i+1].dorm=stu0[i].dorm;
}
for(i=2;i<sum+1;i++){
exchangeData(&stu1,&stu[i]); /*保存待插入元素到stu1*/
low=1;high=i-1;
while(low<=high)
{
mid=(low+high)/2;
if(strcmp(stu1.name,stu[mid].name)>0)
low=mid+1;
else
high=mid-1;
}
for(j=i-1;j>=high+1;j--)
exchangeData(&stu[j+1],&stu[j]);//后移元素,留出插入空位
exchangeData(&stu[high+1],&stu1);
}
for(i=0;i<sum;i++){
stup[i].num=stu[i+1].num;
strcpy(stup[i].name,stu[i+1].name);
strcpy(stup[i].sex,stu[i+1].sex);
stup[i].age=stu[i+1].age;
strcpy(stup[i].studentclass,stu[i+1].studentclass);
stup[i].dorm=stu[i+1].dorm;
}
}
/*根据学号从大到小排序 插入的希尔排序*/
void ShellInsert(STUDENTS stup[],int sum,int dk){
int i,j,k;
STUDENTS stu1;//中间变量
for(k=0;k<dk;k++)
for(i=dk+k;i<sum;i=i+dk)
if(stup[i].num<stup[i-dk].num)
{
exchangeData(&stu1,&stup[i]);
for(j=i-dk;j>=0&&stu1.num<stup[j].num;j=j-dk)//记录向后移
exchangeData(&stup[j+dk],&stup[j]);
exchangeData(&stup[j+dk],&stu1);
}
}
void sortByNum(STUDENTS stu[],int sum,STUDENTS stup[])
{
int i,x;
cpStu(stu,stup,sum);
int dlta[5]={5,4,3,2,1};
for(x=0;x<5;x++)
ShellInsert(stup,sum,dlta[x]);
}
//总的函数
void sortStudent(STUDENTS stu[],int sum){
STUDENTS stup[1000];//引用,把排好序的放在这里,不跟原来的混淆
int choice,x,i;
do{
system("cls");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printf(" ▄ ▄\n");
printf(" ▄ 学生宿舍信息排序 ▄\n");
printf(" ▄ ▄\n");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
select:
choice=selectSort();
system("cls");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printf(" ▄ ▄\n");
printf(" ▄ 学生宿舍信息排序 ▄\n");
printf(" ▄ ▄\n");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
switch(choice)
{
case 1: sortByNum(stu,sum,stup); break;/*学生学号信息顺序*/
case 2: sortByClass(stu,sum,stup);break;/*学生班级信息顺序*/
case 3: sortByDorm(stu,sum,stup); break;/*学生宿舍信息顺序*/
case 4: sortByName(stu,sum,stup); break;/*学生姓名信息顺序*/
case 0: break;
}
//打印排好序的
printHead();
for(i=0;i<sum;i++)
printSearch(stup,i);
if(choice==1||choice==2||choice==3||choice==4)
{
printf("\n\n");
button:
printf("继续查询请按1,返回主菜单请按0 ");
scanf("%d",&x);
if(x==1)
x=1;
else if(x==0)
continue;
else
{
printf("请输入正确的指令\n");
goto button;
}
}
else if(choice==0)
x=0;
else
{
printf("\n\t\t请输入正确的指令\n");
goto select;
}
}while(x==1);
}
/* 根据条件查找指针point*/
///
//查询或者修改的选择;
int selectChoice(char tiaojian[20]){
int choice;
printf("\n\n\n ********您想根据哪个条件%s********\n\n",tiaojian);
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);
return choice;
}
///????????????????????????????为什么这里的指针得返回菜可行,参数不是指针,操作的是地址的????
Points *connectPoint(Points *r,Points *p,int i){
p=(Points *)malloc(sizeof(Points));
p->a=i;
r->points=p;
r=p;
return r;
}
//choice是指主菜单中的功能选项,字符数组tiaojian为相应的字符,比如如果选择查询的话,
//tiaojian传参进来的应该为 "查询",这里是为了提高函数的复用性。
Points *findPoint(STUDENTS stu[],int sum,int choice,char tiaojian[])
{
int i,j=0; Points *p,*q,*r; q=(Points *)malloc(sizeof(Points));r=q;
int num,age,dorm;char classs[20],sex[5],name[20];
printf(" \n\n请输入您要查找的学生的%s",tiaojian);
switch(choice)
{
case 1: scanf("%d",&num);
for(i=0;i<sum;i++)
if(num==stu[i].num)
r=connectPoint(r,p,i);
break;
case 2: scanf("%s",name);for(i=0;i<sum;i++)if(strcmp(name,stu[i].name)==0)r=connectPoint(r,p,i);break;
case 3: scanf("%s",sex);for(i=0;i<sum;i++)if(strcmp(sex,stu[i].sex)==0)r=connectPoint(r,p,i);break;
case 4: scanf("%d",&age);for(i=0;i<sum;i++)if(age==stu[i].age)r=connectPoint(r,p,i);break;
case 5: scanf("%s",classs);for(i=0;i<sum;i++)if(strcmp(classs,stu[i].studentclass)==0)r=connectPoint(r,p,i);break;
case 6: scanf("%d",&dorm);for(i=0;i<sum;i++)if(dorm==stu[i].dorm)r=connectPoint(r,p,i);break;
}
r->points=NULL;
return q;
}
//
/*查询学生信息*/
void inquire(STUDENTS stu[],int sum) {
int choice;
Points *p;
do{
system("cls");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printf(" ▄ ▄\n");
printf(" ▄ 查询学生宿舍信息 ▄\n");
printf(" ▄ ▄\n");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
button:
choice=selectChoice(chaxun);
system("cls");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printf(" ▄ ▄\n");
printf(" ▄ 查询学生宿舍信息 ▄\n");
printf(" ▄ ▄\n");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
switch里面不能调用排序功能,为什么?????????
switch(choice)
{
case 1:p=findPoint(stu,sum,choice,xuehao);break;
case 2:p=findPoint(stu,sum,choice,xingming);break;
case 3:p=findPoint(stu,sum,choice,xingbie);break;
case 4:p=findPoint(stu,sum,choice,nianling);break;
case 5:p=findPoint(stu,sum,choice,banji);break;
case 6:p=findPoint(stu,sum,choice,sushe);break;
case 0:return;
default :printf("请输入正确的指令");goto button;//不断循环;
}
if(p->points!=NULL)
{
p=p->points;
printHead();
while(p!=NULL)
{
printSearch(stu,p->a);
p=p->points;
}
}
else
printfNotFound();
//选择操作
selectOperate();
}while(a);
}
//二分法只适用于查找一个 目前只有学号,姓名,宿舍排序
Points *findPoint2(STUDENTS stu[],int sum,int choice,char tiaojian[])
{
int i,j=0; Points *p,*q,*r; q=(Points *)malloc(sizeof(Points));r=q;
int num,age,dorm;char classs[20],sex[5],name[20];
printf(" \n\n请输入您要查找的学生的%s",tiaojian);
switch(choice)
{
case 1: scanf("%d",&num);break;
case 2: scanf("%s",name);break;
case 3: scanf("%d",&dorm);break;
}
int flag=0;
int low=0,high=sum-1,mid;
while(low<=high){
mid=(low+high)/2;
switch(choice)
{
case 1:if(num==stu[mid].num){r=connectPoint(r,p,mid);printf("mid==%d",mid);flag=1;}
else if(stu[mid].num>num)high=mid-1;else low=mid+1;
break;
case 2: if(strcmp(name,stu[mid].name)==0){r=connectPoint(r,p,mid);flag=1;} if(strcmp(stu[mid].name,name)>0)high=mid-1;else low=mid+1;break;
case 3: if(dorm==stu[mid].dorm){r=connectPoint(r,p,mid);flag=1;} if(stu[mid].dorm>dorm)high=mid-1;else low=mid+1;break;
}
//如果找到,就跳出循环
if(flag)
break;
}
r->points=NULL;
return q;
}
/*二分法查询学生信息*/
void inquire2(STUDENTS stu[],int sum) {
STUDENTS stup1[1000];//引用,把排好序的放在这里,不跟原来的混淆
STUDENTS stup2[1000];//引用,把排好序的放在这里,不跟原来的混淆
STUDENTS stup3[1000];//引用,把排好序的放在这里,不跟原来的混淆
//二分法得先排序
sortByNum(stu,sum,stup1);
sortByName(stu,sum,stup2);
sortByDorm(stu,sum,stup3);
int choice;
Points *p;
do{
system("cls");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printf(" ▄ ▄\n");
printf(" ▄ 查询学生宿舍信息 ▄\n");
printf(" ▄ ▄\n");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
button:
printf("\n\n\n ********您想根据哪个条件查询********\n\n");
printf(" 1. 学号\n\n");
printf(" 2. 姓名\n\n");
printf(" 3. 宿舍号\n\n");
printf(" 0. 返回主菜单\n\n");
printf(" 请选择(0-3):");
scanf("%d",&choice);
system("cls");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printf(" ▄ ▄\n");
printf(" ▄ 查询学生宿舍信息 ▄\n");
printf(" ▄ ▄\n");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
switch里面不能调用排序功能,为什么?????????
switch(choice)
{
case 1:p=findPoint2(stup1,sum,choice,xuehao);break;//二分法查询
case 2:p=findPoint2(stup2,sum,choice,xingming);break;//二分法查询
case 3:p=findPoint2(stup3,sum,choice,sushe);break;//二分法查询
case 0:return;
default :printf("请输入正确的指令");goto button;//不断循环;
}
if(p->points!=NULL)
{
p=p->points;
printHead();
while(p!=NULL)
{
if(choice==1) {
printSearch(stup1,p->a);
p=p->points;}
if(choice==2) {
printSearch(stup2,p->a);
p=p->points;}
if(choice==3) {
printSearch(stup3,p->a);
p=p->points;}
}
}
else
printfNotFound();
//选择操作
selectOperate();
}while(a);
}
//修改和删除判断输入学生个数
int operateNum(int sum){
int n;
printf("请输入你要操作的学生的个数:");
scanf("%d",&n);
if(n>sum)
{
printf("\n\n 输入学生个数超过总量,操作失败\n");
selectOperate();
return 0;
}
else if(n<=0)
{
printf("\n\n 输入学生个数不能小于或等于0,操作失败\n");
selectOperate();
return 0;
}
return n;
}
/*只能根据学号删除学生信息*/
void exchangeData(STUDENTS *stu1,STUDENTS *stu2);
//返回总数
int deletel(STUDENTS stu[],int sum)
{
a=1;
system("cls");
int i,j=0,n=0,flag=1;
Points *p;
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printf(" ▄ ▄\n");
printf(" ▄ 删除学生宿舍信息 ▄\n");
printf(" ▄ ▄\n");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
while(n==0)//这里接收到的两个数,n判断学生个数,a判断是否返回主菜单
{
n=operateNum(sum);
//选择操作
if(a==0)
return sum; //0就返回主菜单
}
do{
if(flag){
system("cls");
Points *p;
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printf(" ▄ ▄\n");
printf(" ▄ 删除学生宿舍信息 ▄\n");
printf(" ▄ ▄\n");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
}
//查一个删一个
p=findPoint(stu,sum,1,xuehao);
p=p->points;
if(p!=NULL)
{
i=p->a;
//把后面的一次覆盖掉前面一个
for(;i<sum-1;i++)
exchangeData(&stu[i],&stu[i+1]);
printf("删除成功\n");
flag=0;
j++;
if(j==n)
{
printf("\n\n删除操作已完成\n");
//选择操作
selectOperate();
if(a==0)
return sum-n;
else
deletel(stu,sum-n);
}
}
else{
printf("输入的学号不存在,操作失败\n");
//选择操作
selectOperate();
if(a==0)
return sum-j;
}
}while(a==1&&j<n);
}
/*只能根据学号修改学生信息*/
void change(STUDENTS stu[],int sum)
{
int choice;
Points *p;
do{
system("cls");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printf(" ▄ ▄\n");
printf(" ▄ 修改学生宿舍信息 ▄\n");
printf(" ▄ ▄\n");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
p=findPoint(stu,sum,1,xuehao);
p=p->points;
if(p!=NULL)
{
system("cls");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
printf(" ▄ ▄\n");
printf(" ▄ 修改学生宿舍信息 ▄\n");
printf(" ▄ ▄\n");
printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
int i=p->a;
print(stu,i);
button:
choice=selectChoice(xiugai);
switch(choice)
{
case 1:printf("\n 请输入你改的新学号");scanf("%d",&stu[i].num); break;
case 2:printf("\n 请输入你改的新姓名");scanf("%s",stu[i].name); break;
case 3:printf("\n 请输入你改的新性别");scanf("%s",stu[i].sex); break;
case 4:printf("\n 请输入你改的新年龄");scanf("%d",&stu[i].age); break;
case 5:printf("\n 请输入你改的新班级");scanf("%s",stu[i].studentclass); break;
case 6:printf("\n 请输入你改的新宿舍");scanf("%d",&stu[i].dorm); break;
case 0:return;
default :printf("请输入正确的指令");goto button;
}
printf("\n 修改成功:");
print(stu,i);
}
else
printfNotFound();
//选择操作
selectOperate();
if(a==0)
return;
}while(a);
}
void pagedis()
{
printf(" \n\n\n **********************************\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * 欢迎进入学生宿舍信息管理系统 *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" **********************************\n");
}
//欢迎
void welcome(){
char heart[30][150]={
" ************ ************",
" ****************** ******************",
" ******************#******* **************************",
" **********************#********* ********************************",
" **********************##########*** **************#******************** ",
" **********************#*********#**** **##********#************************ ",
" *********##########**#****#****#**********##****#************************** ",
" **********#*******#*#*****#***#***************#********#########*********** ",
" **********#*****#********#***********#####***#********#*******#********** ",
" ***********#***#********#***************#***#******#*#****#**#********* ",
" ***********##**********#**************#*****#****#***#*****#*#******* ",
" **********##*********#*#************#*****####*****#*******#******* ",
" ********#**#*******#***#************#*************#************** ",
" *****#****#*****#*****#************#************#************ ",
" **#**********#*******#******######************#********** ",
" **********#*********#*****########################### ",
" ************************************************** ",
" ********************************************** ",
" ****************************************** ",
" ************************************** ",
" ********************************** ",
" ****************************** ",
" ************************** ",
" ********************** ",
" ****************** ",
" ************** ",
" ********** ",
" ****** ",
" ** "
};
int i;
for(i=0;i<29;i++) //逐行打印
printf("%s\n",heart[i]);
}
void bye(){
system("cls");
char heart[11][150]={
"\t\t _____ _ _ ",
"\t\t |_ _| | |_ __ _ _ _ | |__ ___ o O O ",
"\t\t | | | ' \\ / _` | | ' \\ | / / (_-< o ",
"\t\t _|_|_ |_||_| \\__,_| |_||_| |_\\_\\ /__/_ TS__[O] ",
"\t\t_|\"\"\"\"\"|_|\"\"\"\"\"|_|\"\"\"\"\"|_|\"\"\"\"\"|_|\"\"\"\"\"|_|\"\"\"\"\"| {======| ",
"\t\t\"`-0-0-\'\"`-0-0-\'\"`-0-0-\'\"`-0-0-\'\"`-0-0-\'\"`-0-0-\'./o--000' "
};
int i;
printf("\n\n");
for(i=0;i<6;i++) //逐行打印
printf("%s\n",heart[i]);
}
void designer(){
printf("\n\n\t\t☆☆☆☆☆☆☆☆★★设计者信息★★☆☆☆☆☆☆☆☆\n\n");
printf("\t\t ●● ●●\n\n");
printf("\t\t ●● 姓名:xxxx ●●\n\n");
printf("\t\t ●● ●●\n\n");
printf("\t\t ●● 班级:xxxxxxx ●●\n\n");
printf("\t\t ●● ●●\n\n");
printf("\t\t ●● 学号: xxxxxxxxxxxx ●●\n\n");
printf("\t\t ●● ●●\n\n");
printf("\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
}
void check()
{
char userName[5];/*用户名*/
char userPWD[5];/*密码*/
int i;
system("color 5E");
for(i = 1; i < 4; i++)
{
/*用户名和密码均为123;*/
printf("\n 请输入您的用户名(123):");
gets(userName);
printf("\n 请输入您的密码(123):");
gets(userPWD);
if ((strcmp(userName,"123")==0) && (strcmp(userPWD,"123")==0))/*验证用户名和密码*/
{
system("cls");
welcome();
printf("\n 3秒后自动跳转");
Sleep(3000);
return;
}
else
{
if (i < 3)
printf("用户名或密码错误,请重新输入!");
else
{
printf("您已连续3次将用户名或密码输错,系统将退出!");
exit(1);
}
}
}
}
void menu()
{
STUDENTS stu[20];
int choice,sum;
sum=read_file(stu);
if(sum==0)
{
printf("首先录入基本库存信息!按回车后进入*****\n");
getch();
sum=input(stu,sum);
}
system("cls");
do
{
system("cls");
button:
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: sum=input(stu,sum); break;/*创建学生信息*/
case 2: output(stu,sum) ; break;/*打印学生信息*/
case 3: inquire(stu,sum); break;/*查询学生信息*/
case 4: change(stu,sum); break;/*修改学生信息*/
case 5: sum=deletel(stu,sum);break;/*删除学生信息*/
case 6: sortStudent(stu,sum); break;/*学生信息顺序*/
case 0: bye();designer();break;
default:system("cls"); printf("\n 请输入正确的指令!\n");goto button;
}
}while(choice!=0);
save_file(stu,sum);
}
int main()
{
pagedis();
check();
menu();
return 0;
}