-------------------------------------------------------------------------------------
宿舍管理:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
typedef struct
{
char roomnum[4];
char bednum[2];
char num[10];
char name[20];
}Student;
Student room1[1000];
int menu_select()
{
char c;
do{
system("cls");
printf("\t\t---------------学生宿舍管理系统---------------\n");
printf("\t\t§ 1. 输入学生数据 §\n");
printf("\t\t§ 2. 显示学生数据 §\n");
printf("\t\t§ 3. 按房间号排序并显示 §\n");
printf("\t\t§ 4. 按学号排序并显示 §\n");
printf("\t\t§ 5. 插入一条记录按学号排序并显示 §\n");
printf("\t\t§ 6. 按姓名查找,删除一条记录 §\n");
printf("\t\t§ 7 查找并显示一个记录 §\n");
printf("\t\t§ 8. 从文件中读入数据 §\n");
printf("\t\t§ 9. 循环写入数据 §\n");
printf("\t\t§ 0. 结束程序 §\n");
printf("\t\t----------------------------------------------\n");
printf("\t\t请选择您要运行的选项按(0-9):");
c=getchar();
}while(c<'0'||c>'9');
return(c-'0');
}
int Input(Student room[],int n)
{int i=0;
char sign=0,x[10];
while(sign!='n'&&sign!='N')
{
printf("\t\t房间号:");
scanf("\t\t%s",&room[n+i].roomnum);
printf("\t\t床位号:");
scanf("\t\t%s",&room[n+i].bednum);
printf("\t\t学号:");
scanf("\t\t%s",&room[n+i].num);
printf("\t\t姓名:");
scanf("\t\t%s",&room[n+i].name);
gets(x);
printf("\t\t是否继续输入?(Y/N)");
scanf("\t\t%c",&sign);
i++;
}
return(n+i);
}
void Display(Student room[],int n)
{
int i;
printf("\t\t--------------------------------------------------\n");
printf("\t\t房间号 床位号 学号 姓名 \n");
printf("\t\t--------------------------------------------------\n");
for(i=1;i<n+1;i++)
{
printf("\t\t%-10s%-10s%-10s%-20s\n",room[i-1].roomnum,room[i-1].bednum,room[i-1].num,room[i-1].name);
if(i>1&&i==0)
{printf("\t\t--------------------------------------------------\n");
printf("\t\t");
system("pause");
printf("\t\t--------------------------------------------------\n");
}
}
printf("\t\t");
system("pause");
}
void Sort_by_num(Student room[],int n)
{
int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(strcmp(room[j].num,room[j+1].num)>0)
{
strcpy(t,room[j+1].bednum);
strcpy(room[j+1].bednum,room[j].bednum);
strcpy(room[j].bednum,t);
strcpy(t,room[j+1].num);
strcpy(room[j+1].num,room[j].num);
strcpy(room[j].num,t);
strcpy(t,room[j+1].name);
strcpy(room[j+1].name,room[j].name);
strcpy(room[j].name,t);
}
}
void Sort_by_roomnum(Student room[],int n)
{
int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(strcmp(room[j].roomnum,room[j+1].roomnum)>0)
{strcpy(t,room[j+1].roomnum);
strcpy(room[j+1].roomnum,room[j].roomnum);
strcpy(room[j].roomnum,t);
strcpy(t,room[j+1].bednum);
strcpy(room[j+1].bednum,room[j].bednum);
strcpy(room[j].bednum,t);
strcpy(t,room[j+1].num);
strcpy(room[j+1].num,room[j].num);
strcpy(room[j].num,t);
strcpy(t,room[j+1].name);
strcpy(room[j+1].name,room[j].name);
strcpy(room[j].name,t);
}
}
int Insert_a_record(Student room[],int n)
{char x[100];
printf("\t\t学生房间号:");
scanf("\t\t%s",&room[n].roomnum);
printf("\t\t学生床位号:");
scanf("\t\t%s",&room[n].bednum);
printf("\t\t学生学号:");
scanf("\t\t%s",&room[n].num);
printf("\t\t学生姓名:");
scanf("\t\t%s",&room[n].name);
gets(x);
n++;
Sort_by_num(room,n);
printf("\t\t插入记录成功!\n");
return(n);
}
int Delete_a_record(Student room[],int n)
{
char s[20];
int i=0,j;
printf("\t\t输入他(她)的姓名:");
scanf("%s",s);
while(strcmp(room[i].name,s)!=0&&i<n) i++;
if(i==n)
{
printf("\t\t对不起没找到该学生!\n");
return(n);
}
for(j=i;j<n-1;j++)
{
strcpy(room[j].roomnum,room[j+1].roomnum);
strcpy(room[j].bednum,room[j+1].bednum);
strcpy(room[j].num,room[j+1].num);
strcpy(room[j].name,room[j+1].name);
}
printf("\t\t删除记录成功!\n");
return(n-1);
}
void Query_a_record(Student room[],int n)
{
char s[20];
int i=0;
printf("\t\t输入他(她)的姓名:");
scanf("\t\t%s",&s);
while(strcmp(room[i].name,s)!=0&&i<n) i++;
if(i==n)
{
printf("\t\t对不起没找到该学生!\n");
return;
}
printf("\t\t他(她)的房间号:%s\n",room[i].roomnum);
printf("\t\t他(她)的床位号:%s\n",room[i].bednum);
printf("\t\t他(她)的学号:%s\n",room[i].num);
}
int AddfromText(Student room[],int n)
{
int i=0,num;
FILE *fp;
char filename[20];
printf("\t\t输入文件名:");
scanf("\t\t%s",&filename);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\t\t无法打开该文件\n");
printf("\t\t");
system("pause");
return(n);
}
fscanf(fp,"%d",&num);
while(i<num)
{
fscanf(fp,"%s%s%s%s",room[n+i].roomnum,room[n+i].bednum,room[n+i].num,room[n+i].name);
i++;
}
n+=num;
fclose(fp);
printf("\t\t读入成功!\n");
printf("\t\t");
system("pause");
return(n);
}
void WritetoText(Student room[],int n)
{
int i=0;
FILE *fp;
char filename[100];
printf("\t\t循环写入数据\n");
printf("\t\t输入文件名:");
scanf("\t\t%s",&filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("\t\t无法打开该文件\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n);
while(i<n)
{
fprintf(fp,"%-10s%-10s%-10s%-10s\n",room[i].roomnum,room[i].bednum,room[i].num,room[i].name);
i++;
}
fclose(fp);
printf("写入成功!\n");
}
int main()
{
int n=0;
for(;;)
{
switch(menu_select())
{
case 1:
printf("\t\t输入学生数据\n");
n=Input(room1,n);
break;
case 2:
printf("\t\t显示学生数据\n");
Display(room1,n);
break;
case 3:
printf("\t\t按房间号排序并显示\n");
Sort_by_roomnum(room1,n);
printf("\t\t排序成功!\n");
Display(room1,n);
printf("\t\t");
break;
case 4:
printf("\t\t按学号排序并显示\n");
Sort_by_num(room1,n);
printf("\t\t\t排序成功!\n");
Display(room1,n);
printf("\t\t");
break;
case 5:
printf("\t\t插入一条记录按学号排序并显示\n");
n=Insert_a_record(room1,n);
Display(room1,n);
printf("\t\t");
break;
case 6:
printf("\t\t按姓名查找,删除一条记录\n");
n=Delete_a_record(room1,n);
printf("\t\t");
system("pause");
break;
case 7:
printf("\t\t查找并显示一个记录\n");
Query_a_record(room1,n);
printf("\t\t");
system("pause");
break;
case 8:
printf("\t\t从文件中读入数据\n");
AddfromText(room1,n);
printf("\t\t");
system("pause");
break;
case 9:
printf("\t\t循环写入数据\n");
WritetoText(room1,n);
printf("\t\t");
system("pause");
break;
case 0:
printf("\t\t谢谢使用\n");
printf("\t\t");
system("pause");
exit(0);
}
}
}
通过对比发现,这两个程序的源代码几乎一样,但是这个过程让我学到很多,这个思考的过程很重要。