|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
void input(); /*宿舍信息添加函数*/
void del(); /*宿舍信息删除函数*/
void find(); /*宿舍信息查找函数*/
void sort(); /*宿舍信息排序函数*/
void view(); /*宿舍信息显示函数*/
typedef struct stu{ /*定义链表节点的结构体类型*/
int num; /*学号*/
char name[20]; /*姓名*/
char stay[20]; /*所在系*/
char clas[20]; /*班级*/
int sus; /*宿舍*/
int phone; /*电话号码*/
char bed[20]; /*床位*/
struct stu *next;
}STU;
STU *create() /*读取文件并创建链表*/
{ int n=0;
FILE *fp;
STU *head,*p1,*p2;
fp=fopen("wzw","r"); /*打开wzw文件*/
if(fp==NULL)
{ printf("打开文件失败");
getchar();
exit(0);
}
head=NULL;
p1=p2=(STU*)malloc(sizeof(STU));
while(!feof(fp)) /*读入文件数据并创建链表*/
{ fscanf(fp,"%d%s%s%s%d%d%s",&p1->num,&p1->name,&p1->stay,&p1->clas,&p1->sus,&p1->phone,&p1->bed);
n=n+1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(STU*)malloc(sizeof(STU));
}
p2->next=NULL;
free(p1);
fclose(fp);
return(head);
}
void main()
{char c;
do
{ system("cls");
printf("\t\t****************************************\n");
printf("\t\t****************************************\n");
printf(" \n");
printf("\t\t 欢迎使用学生信息管理系统 \n");
printf(" \n");
printf("\t\t 自动化101 翁志文 10417126 \n");
printf(" \n");
printf("\t\t****************************************\n");
printf("\t\t****************************************\n");
printf(" \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(" \n");
printf(" \n");
printf("\t\t请选择输入选项[1\\2\\3\\4\\5\\6]:>");
do
{c=getchar();
}while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&c!='6');
getchar();
switch(c)
{ case '1': input(); break;
case '2' : del(); break;
case '3': find(); break;
case '4': sort(); break;
case '5': view(); break;
case '6': exit(0); break;
}
printf(" 按任意键返回主菜单:\n");
getchar();
system("cls");
}while(1);
}
void input() /*宿舍信息添加功能函数*/
{ int m=1,n=0; /*输入信息的循环变量m*/
FILE *fp; /*文件指针fp*/
STU *p,*head,*p1,*p2;
head=NULL; /*头结点为NULL*/
system("cls");
p1=p2=(STU*)malloc(sizeof(STU)); /*动态申请一个新节点*/
while(m) /*输入学生宿舍信息并创建链表*/
{ printf("请输入学生宿舍信息");
printf("\n");
printf("请输入学号:");
scanf("%d",&p1->num);
printf("请输入姓名:");
scanf("%s",&p1->name);
printf("请输入所在系:");
scanf("%s",&p1->stay);
printf("请输入班级:");
scanf("%s",&p1->clas);
printf("请输入宿舍号:");
scanf("%d",&p1->sus);
printf("请输入电话号码:");
scanf("%d",&p1->phone);
printf("请输入床位:");
scanf("%s",&p1->bed);
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(STU*)malloc(sizeof(STU));
printf("请选择 0:结束输入 1:继续输入\n");
scanf("%d",&m);
}
p2->next=NULL;
free(p1); /*释放p1指向的节点内存*/
fp=fopen("wzw","a+"); /*打开文件wzw*/
p=head;
while(p) /*将输入的学生宿舍信息保存到文件*/
{fputc('\n',fp);
fprintf(fp,"%-10d%-10s%-10s%-10s%-10d%-10d%-10s",p->num,p->name,p->stay,p->clas,p->sus,p->phone,p->bed);
p=p->next;
}
fclose(fp); /*关闭文件*/
}
void del() /*宿舍信息删除功能函数*/
{ FILE *fp;
int num,sus,j,i;
STU *head,*p1,*p2,*p3;
head=create();
system("cls");
printf("请选择删除方式的序号 1:宿舍号 2:学号\n");
scanf("%d",&i);
if(i==1)
{ printf("请输入要删除的学生宿舍号:\n");
scanf("%d",&sus);
if(head==NULL)
{printf("\n文件内容为空!\n");
exit(0);
}
p1=head;
while(sus!=p1->sus&&p1->next!=NULL)
{p2=p1;
p1=p1->next;
}
if(sus==p1->sus)
{printf("学生信息已找到:\n");
printf("学号 姓名\t 所在系\t 班级\t宿舍号\t电话\t床号\n");
printf("%-5d%s\t\t%s\t%s\t%d\t%d\t%s\n",p1->num,p1->name,p1->stay,p1->clas,p1->sus,p1->phone,p1->bed);
printf("是否删除 1:是 2:否\n");
scanf("%d",&j);
if(j==1)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
free(p1);
fp=fopen("wzw","w"); /*打开文件wzw*/
p3=head;
while(p3->next) /*将输入的学生宿舍信息保存到文件*/
{ fputc('\n',fp);
fprintf(fp,"%-10d%-10s%-10s%-10s%-10d%-10d%-10s",p3->num,p3->name,p3->stay,p3->clas,p3->sus,p3->phone,p3->bed);
p3=p3->next;
} fclose(fp);
}
}
else
printf("找不到此学生宿舍信息\n");
}
if(i==2)
{ printf("请输入要删除的学生学号:\n");
scanf("%d",&num);
if(head==NULL)
{
printf("\n文件内容为空!\n");
exit(0);
}
p1=head;
while(num!=p1->num&&p1->next!=NULL)
{ p2=p1;
p1=p1->next;
}
if(num==p1->num)
{printf("学生宿舍信息已找到:\n");
printf("学号 姓名\t 所在系\t 班级\t宿舍号\t电话\t床号\n");
printf("%-5d%s\t\t%s\t%s\t%d\t%d\t%s\n",p1->num,p1->name,p1->stay,p1->clas,p1->sus,p1->phone,p1->bed);
printf("是否删除 1:是 2:否\n");
scanf("%d",&j);
if(j==1)
{if(p1==head)
head=p1->next;
else
p2->next=p1->next;
free(p1);
fp=fopen("wzw","w"); /*打开文件wzw*/
p3=head;
while(p3->next) /*将输入的学生宿舍信息保存到文件*/
{ fputc('\n',fp);
fprintf(fp,"%-10d%-10s%-10s%-10s%-10d%-10d%-10s",p3->num,p3->name,p3->stay,p3->clas,p3->sus,p3->phone,p3->bed);
p3=p3->next;
}fclose(fp);
}
}
else
printf("找不到此学生宿舍信息\n");
}
printf("请选择序号 1:继续删除 2:结束删除\n");
scanf("%d",&j);
if(j==1)
del();
}
void find() /*宿舍信息查找功能函数*/
{ int i,j,k=0; /*定义i为查找方式;定义j为学号变量*/
STU *head,*p;
head=create();
system("cls");
printf("请选择查找方法的序号:1.按学号查找 2.按宿舍号查找\n");
scanf("%d",&i);
if(i==1) /*按学号查找*/
{ printf("请输入要查找的学号:");
scanf("%d",&j);
p=head;
while((j!=p->num)&&(p->next!=NULL))
p=p->next;
if(j==p->num) /*查到宿舍信息并输出*/
{ printf("学生宿舍信息已找到:\n");
printf("学号 姓名\t 所在系\t 班级\t宿舍号\t电话\t床号\n");
printf("%-5d%s\t\t%s\t%s\t%d\t%d\t%s\n",p->num,p->name,p->stay,p->clas,p->sus,p->phone,p->bed);
}
else /*无此学生信息*/
printf("抱歉,没有此学生信息\n");
}
if(i==2) /*按宿舍号查找*/
{printf("请输入要查找的宿舍号:");
scanf("%d",&j);
p=head;
while((j!=p->sus)&&(p->next!=NULL))
p=p->next;
if(j==p->sus) /*查到宿舍信息并输出*/
{ printf("学生宿舍信息已找到:\n");
printf("学号 姓名\t所在系\t班级\t宿舍号\t电话号码\t床号\n");
printf("%-5d%s\t%s\t%s\t%d\t%d\t%s\n",p->num,p->name,p->stay,p->clas,p->sus,p->phone,p->bed);
}
else /*无此学生宿舍信息*/
printf("抱歉,没有此学生信息\n");
}
free(p);
printf("请选择正确序号 1:继续查找 2:结束查找\n");
scanf("%d",&i);
if(i==1)
find();
if(i==2)
getchar();
}
void sort() /*定义学生信息排序功能函数*/
{ STU *head,*p0,*p1,*p2,*pt=NULL;
int a,j,k,i=0,n;
head=create();
system("cls");
printf("请选择您想要的排序方式按数字选择:1、按系排序2、按班级排序 请输入选项:");
scanf("%d",&a);
getchar();
if(a==1) /*按系排序*/
{ pt=(STU *)malloc(sizeof(STU));
p1=head;
while(p1!=NULL)
{ i++;
p1=p1->next;
}
p1=head;
for(j=0;j<i-1;j++) /*用冒泡法排序*/
{ p1=head;
for(k=0;k<i-1-j;k++)
{ p2=p1;
p1=p1->next;
if(strcmp(p2->stay,p1->stay)>0) /*交换两链表间数据*/ { n=p2->num;p2->num=p1->num;p1->num=n;
strcpy(pt->name,p1->name);strcpy(p1->name,p2->name);strcpy(p2->name,pt->name);
strcpy(pt->stay,p1->stay);strcpy(p1->stay,p2->stay);strcpy(p2->stay,pt->stay);
strcpy(pt->clas,p1->clas);strcpy(p1->clas,p2->clas);strcpy(p2->clas,pt->clas);
n=p2->sus;p2->sus=p1->sus;p1->sus=n;
n=p2->phone;p2->phone=p1->phone;p1->phone=n;
strcpy(pt->bed,p1->bed);strcpy(p1->bed,p2->bed);strcpy(p2->bed,pt->bed);
}
}
}
printf("排序成功!!");
printf("\n");
p0=head;
printf("学号 姓名\t所在系\t班级\t宿舍号\t电话\t床号\n");
while(p0->next!=NULL)
{ printf("%d\t%s\t%s\t%s\t%d\t%d\t%s\n",p0->num,p0->name,p0->stay,p0->clas,p0->sus,p0->phone,p0->bed);
printf("\n");
p0=p0->next;
}
}
if(a==2) /*按班级排序*/
{ pt=(STU *)malloc(sizeof(STU));
p1=head;
while(p1!=NULL)
{ i++;
p1=p1->next;
}
p1=head;
for(j=0;j<i-1;j++) /*用冒泡法排序*/
{ p1=head;
for(k=0;k<i-1-j;k++)
{ p2=p1;
p1=p1->next;
if(strcmp(p2->clas,p1->clas)>0) /*交换两链表间数据*/
{ n=p2->num;p2->num=p1->num;p1->num=n;
strcpy(pt->name,p1->name);strcpy(p1->name,p2->name);strcpy(p2->name,pt->name);
strcpy(pt->stay,p1->stay);strcpy(p1->stay,p2->stay);strcpy(p2->stay,pt->stay);
strcpy(pt->clas,p1->clas);strcpy(p1->clas,p2->clas);strcpy(p2->clas,pt->clas);
n=p2->sus;p2->sus=p1->sus;p1->sus=n;
n=p2->phone;p2->phone=p1->phone;p1->phone=n;
strcpy(pt->bed,p1->bed);strcpy(p1->bed,p2->bed);strcpy(p2->bed,pt->bed);
}
}
}
printf("排序成功!!");
printf("\n");
p0=head;
printf("学号 姓名\t所在系\t班级\t宿舍号\t电话\t床号\n");
while(p0->next!=NULL)
{ printf("%d\t%s\t%s\t%s\t%d\t%d\t%s\n",p0->num,p0->name,p0->stay,p0->clas,p0->sus,p0->phone,p0->bed);
printf("\n");
p0=p0->next;
}
}
}
void view() /*定义学生信息显示功能函数*/
{ FILE *fp;
char ch;
fp=fopen("wzw","r");
ch=fgetc(fp);
system("cls");
printf("学号 姓名\t 所在系 班级\t宿舍号\t 电话号码 床号\n");
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
printf("\n");
}
这个程序 添加信息后怎么保存啊??我想下次打开后能直接查找宿舍信息
|
|