主题:[讨论]公寓管理系统
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N sizeof(struct stud)
/*先用结构体定义学生信息*/
struct stud
{
int num;
char name[10];
char sex[8];
int age;
char major[18];
int grade;
int classes;
int building;
int floor;
int dormitary;
struct stud *next; /*next是指向本结构体的类型的指针类型*/
};
struct stud *h,*p; /*定义指向结构体的指针变量*/
FILE *fp; /*定义文件指针*/
/*建立和输出链表*/
struct stud *creat(void)
{ struct stud *p1,*p2,*head;
int i,k;
printf("Please input the total number of students:\n");
scanf("%d",&k);
head=NULL;
printf("Please input the message of the student:\n\n");
if(k>0)
{ head=p2=p1=(struct stud*)malloc(N); /*为head,p2,p1申请存储空间,并都指向首结点*/
for(i=1;i<=k;i++)
{ p1=(struct stud*)malloc(N);
printf("Please input the number of the student:\n");
scanf("%d",&p1->num);
printf("Input the name:\n");
scanf("%s",p1->name);
printf("Input the sex(man or female):\n");
scanf("%s",p1->sex);
printf("Input the age:\n");
scanf("%d",&p1->age);
printf("Input the major:\n");
scanf("%s",p1->major);
printf("Please input the grade and class:\n");
scanf("%d%d",&p1->grade,&p1->classes);
printf("Please input the building floor and dormitary:\n");
scanf("%d%d%d",&p1->building,&p1->floor,&p1->dormitary);
p2->next=p1; /*将新结点连到表尾*/
p2=p1; /*p2指向新的表尾*/
}
p2->next=NULL;
head=head->next;
}
save message(head); /*将输入的数据存入文件*/
return head;
}
/*输入模块*/
input message()
{
clrscr();
h=creat();
printf("\n\n\n\n\ press any key to the main meue!!!!\n");
bioskey(0);
}
/*读取信息*/
read message()
{ struct stud *p1,*p2;
h=p1=(struct stud*)malloc(N); /*为了p1申请存储空间,并指向首结点*/
if((fp=fopen("gx1.txt","rb"))==NULL)
{ printf("\n\n\n There is no data for the monent!\n");
return;
}
if(fread(p1,N,1,fp)!=1) return; /*先向p1读入一个数据,若不能读,返回*/
while(1)
{ p2=(struct stud*)malloc(N); /*为了p2申请存储空间*/
if(fread(p2,N,1,fp)!=1) break;
p1->next=p2;
p1=p2;
}
fclose(fp);
bioskey(0);
}
/*输出模块*/
output message(struct stud *p)
{ p=h;
clrscr();
if(p==NULL)
printf("\n\n\n\n\n There is no datas right now!\n");
printf("number name sex age major grade class building floor dormitary\n\n");
while(p!=NULL)
{
printf("%6d%7s%7s%6d%8s%8d%8d%10d%7d%11d\n",p->num,p->name,p->sex,p->age,p->major,p->grade,p->classes,p->building,p->floor,p->dormitary);
p=p->next;
}
printf("\n\n\n\n\ press any key to the main meue!!!!\n");
bioskey(0);
}
/*更新模块*/
renew message()
{
int choice;
do
{ clrscr();
printf("\n\n\n ~~~~~~~~'Renew message~~~~~~~~\n\n");
printf(" 1.Delete message\n\n");
printf(" 2.Revise message\n\n");
printf(" 3.Insert message\n\n");
printf(" 0.Return the main menu\n\n");
printf(" Please choice(0-3):");
scanf("%d",&choice);
switch(choice)
{ case 1:del_message(h);output_message(h);break;
case 2:revise_message();output_message(h);break;
case 3:insert_message(h);output_message(h);break;
case 0:break;
}
}while(choice!=0);
}
/*按学号查询*/
inquire num()
{ int num2;
struct stud *p0;
clrscr();
printf("\n\n\n Please input the number who you what to find:\n\n");
scanf("\n%d",&num2);
p0=h;
while(p0!=NULL)
{ if(p0->num==num2)
{ printf("\n\n****************************Inquire by number**************************\n\n");
printf("number name sex age major grade class building floor dormitary\n\n");
printf("%6d%7s%7s%6d%8s%8d%8d%10d%7d%11d\n",p0->num,p0->name,p0->sex,p0->age,p0->major,p0->grade,p0->classes,p0->building,p0->floor,p0->dormitary);
}
p0=p0->next;
}
printf("\n\n\n\n\ press any key to the main meue!!!!\n");
bioskey(0);
}
/*查询模块*/
inquire message()
{
int choice;
do
{ clrscr();
printf("\n\n\n ~~~~~~~~Inquire Message~~~~~~~~\n\n");
printf(" 1.Inquire by name\n\n");
printf(" 2.Inquire by number\n\n");
printf(" 3.Inquire by dorminary\n\n");
printf(" 4.Inquire by floor\n\n");
printf(" 5.Inquire by building\n\n");
printf(" 0.Return the main menu\n\n");
printf(" Please choice(0-5):");
scanf("%d",&choice);
switch(choice)
{ case 1:inquire_name();break;
case 2:inquire_num();break;
case 3:inquire_dormitary();break;
case 4:inquire_floor();break;
case 5:inquire_building();break;
case 0:break;
}
}while(choice!=0);
}
/*用于输出排序的模块*/
output(struct stud *p)
{ p=h;
printf("number name sex age major grade class building floor dormitary\n\n");
while(p!=NULL)
{
printf("%6d%7s%7s%6d%8s%8d%8d%10d%7d%11d\n",p->num,p->name,p->sex,p->age,p->major,p->grade,p->classes,p->building,p->floor,p->dormitary);
p=p->next;
}
printf("\n\n\n\n\ press any key to the main meue!!!!\n");
bioskey(0);
}
/*排序模块*/
sort message()
{
int choice;
do
{ clrscr();
printf("\n\n\n ~~~~~~~~~~~~~~~Sort message~~~~~~~~~~~~~~~\n\n");
printf(" 1.Sort by number\n\n");
printf(" 2.Sort by dormitary\n\n");
printf(" 3.Sort by floor\n\n");
printf(" 4.Sort by building\n\n");
printf(" 0.Return the main menu\n\n");
printf(" Please choice(0-4):");
scanf("%d",&choice);
switch(choice)
{ case 1:sort_num();output(h);break; /*调用output_message()使排好的数据输出*/
case 2:sort_dormitary();output(h);break;
case 3:sort_floor();output(h);break;
case 4:sort_building();output(h);break;
case 0:break;
}
}while(choice!=0);
}
/*按宿舍号统计*/
count dormitary()
{ struct stud *p;
int dor;
int i=0;
clrscr();
printf("\n\nPlease input the dormitary what you want to count:\n");
scanf("%d",&dor);
clrscr();
printf("\n\n*************************Count by dormitary***********************************\n");
printf("\n\nnumber name sex age major grade class building floor dormitary\n\n");
p=h;
while(p!=NULL)
{ if(p->dormitary==dor)
{ printf("%6d%7s%7s%6d%8s%8d%8d%10d%7d%11d\n",p->num,p->name,p->sex,p->age,p->major,p->grade,p->classes,p->building,p->floor,p->dormitary);
i++;
}
p=p->next;
}
printf("\nThe total:%d",i);
printf("\n\n\n\n\ press any key to the main meue!!!!\n");
bioskey(0);
}
/*统计模块*/
count message()
{
int choice;
do
{ clrscr();
printf("\n\n\n ~~~~~~~~'Count message~~~~~~~~\n\n");
printf(" 1.Count by dormitary\n\n");
printf(" 2.Count by floor\n\n");
printf(" 3.Count by building\n\n");
printf(" 0.Return the main menu\n\n");
printf(" Please choice(0-3):");
scanf("%d",&choice);
switch(choice)
{ case 1:count_dormitary();break;
case 2:count_floor();break;
case 3:count_building();break;
case 0:break;
}
}while(choice!=0);
}
/*主函数*/
void main()
{
int choice;
int key;
printf("Please input the right key:\n");
scanf("%d",&key);
if(key==0)
{ read_message();
do
{
clrscr();
printf("\n\n\n ~~~~~~~XUE SHENG GONG YU GUAN LI XI TONG ~~~~~~~\n\n");
printf(" 1.Input student information\n\n");
printf(" 2.Output student information\n\n");
printf(" 3.Renew student information\n\n");
printf(" 4.Inquire student information\n\n");
printf(" 5.Sort student information\n\n");
printf(" 6.Count student information\n\n");
printf(" 0.exit the system\n\n");
printf(" **************************************************\n\n");
printf(" Please choice(0-6):");
scanf("%d",&choice);
switch(choice)
{
case 1:input message();break;
case 2:output message(h);break;
case 3:renew message();break;
case 4:inquire message();break;
case 5:sort message();break;
case 6:count message();break;
case 0:break;
}
}while(choice!=0);
save message(h); /*退出程序时对数据进行保存*/
}
}
#include<string.h>
#include<stdlib.h>
#define N sizeof(struct stud)
/*先用结构体定义学生信息*/
struct stud
{
int num;
char name[10];
char sex[8];
int age;
char major[18];
int grade;
int classes;
int building;
int floor;
int dormitary;
struct stud *next; /*next是指向本结构体的类型的指针类型*/
};
struct stud *h,*p; /*定义指向结构体的指针变量*/
FILE *fp; /*定义文件指针*/
/*建立和输出链表*/
struct stud *creat(void)
{ struct stud *p1,*p2,*head;
int i,k;
printf("Please input the total number of students:\n");
scanf("%d",&k);
head=NULL;
printf("Please input the message of the student:\n\n");
if(k>0)
{ head=p2=p1=(struct stud*)malloc(N); /*为head,p2,p1申请存储空间,并都指向首结点*/
for(i=1;i<=k;i++)
{ p1=(struct stud*)malloc(N);
printf("Please input the number of the student:\n");
scanf("%d",&p1->num);
printf("Input the name:\n");
scanf("%s",p1->name);
printf("Input the sex(man or female):\n");
scanf("%s",p1->sex);
printf("Input the age:\n");
scanf("%d",&p1->age);
printf("Input the major:\n");
scanf("%s",p1->major);
printf("Please input the grade and class:\n");
scanf("%d%d",&p1->grade,&p1->classes);
printf("Please input the building floor and dormitary:\n");
scanf("%d%d%d",&p1->building,&p1->floor,&p1->dormitary);
p2->next=p1; /*将新结点连到表尾*/
p2=p1; /*p2指向新的表尾*/
}
p2->next=NULL;
head=head->next;
}
save message(head); /*将输入的数据存入文件*/
return head;
}
/*输入模块*/
input message()
{
clrscr();
h=creat();
printf("\n\n\n\n\ press any key to the main meue!!!!\n");
bioskey(0);
}
/*读取信息*/
read message()
{ struct stud *p1,*p2;
h=p1=(struct stud*)malloc(N); /*为了p1申请存储空间,并指向首结点*/
if((fp=fopen("gx1.txt","rb"))==NULL)
{ printf("\n\n\n There is no data for the monent!\n");
return;
}
if(fread(p1,N,1,fp)!=1) return; /*先向p1读入一个数据,若不能读,返回*/
while(1)
{ p2=(struct stud*)malloc(N); /*为了p2申请存储空间*/
if(fread(p2,N,1,fp)!=1) break;
p1->next=p2;
p1=p2;
}
fclose(fp);
bioskey(0);
}
/*输出模块*/
output message(struct stud *p)
{ p=h;
clrscr();
if(p==NULL)
printf("\n\n\n\n\n There is no datas right now!\n");
printf("number name sex age major grade class building floor dormitary\n\n");
while(p!=NULL)
{
printf("%6d%7s%7s%6d%8s%8d%8d%10d%7d%11d\n",p->num,p->name,p->sex,p->age,p->major,p->grade,p->classes,p->building,p->floor,p->dormitary);
p=p->next;
}
printf("\n\n\n\n\ press any key to the main meue!!!!\n");
bioskey(0);
}
/*更新模块*/
renew message()
{
int choice;
do
{ clrscr();
printf("\n\n\n ~~~~~~~~'Renew message~~~~~~~~\n\n");
printf(" 1.Delete message\n\n");
printf(" 2.Revise message\n\n");
printf(" 3.Insert message\n\n");
printf(" 0.Return the main menu\n\n");
printf(" Please choice(0-3):");
scanf("%d",&choice);
switch(choice)
{ case 1:del_message(h);output_message(h);break;
case 2:revise_message();output_message(h);break;
case 3:insert_message(h);output_message(h);break;
case 0:break;
}
}while(choice!=0);
}
/*按学号查询*/
inquire num()
{ int num2;
struct stud *p0;
clrscr();
printf("\n\n\n Please input the number who you what to find:\n\n");
scanf("\n%d",&num2);
p0=h;
while(p0!=NULL)
{ if(p0->num==num2)
{ printf("\n\n****************************Inquire by number**************************\n\n");
printf("number name sex age major grade class building floor dormitary\n\n");
printf("%6d%7s%7s%6d%8s%8d%8d%10d%7d%11d\n",p0->num,p0->name,p0->sex,p0->age,p0->major,p0->grade,p0->classes,p0->building,p0->floor,p0->dormitary);
}
p0=p0->next;
}
printf("\n\n\n\n\ press any key to the main meue!!!!\n");
bioskey(0);
}
/*查询模块*/
inquire message()
{
int choice;
do
{ clrscr();
printf("\n\n\n ~~~~~~~~Inquire Message~~~~~~~~\n\n");
printf(" 1.Inquire by name\n\n");
printf(" 2.Inquire by number\n\n");
printf(" 3.Inquire by dorminary\n\n");
printf(" 4.Inquire by floor\n\n");
printf(" 5.Inquire by building\n\n");
printf(" 0.Return the main menu\n\n");
printf(" Please choice(0-5):");
scanf("%d",&choice);
switch(choice)
{ case 1:inquire_name();break;
case 2:inquire_num();break;
case 3:inquire_dormitary();break;
case 4:inquire_floor();break;
case 5:inquire_building();break;
case 0:break;
}
}while(choice!=0);
}
/*用于输出排序的模块*/
output(struct stud *p)
{ p=h;
printf("number name sex age major grade class building floor dormitary\n\n");
while(p!=NULL)
{
printf("%6d%7s%7s%6d%8s%8d%8d%10d%7d%11d\n",p->num,p->name,p->sex,p->age,p->major,p->grade,p->classes,p->building,p->floor,p->dormitary);
p=p->next;
}
printf("\n\n\n\n\ press any key to the main meue!!!!\n");
bioskey(0);
}
/*排序模块*/
sort message()
{
int choice;
do
{ clrscr();
printf("\n\n\n ~~~~~~~~~~~~~~~Sort message~~~~~~~~~~~~~~~\n\n");
printf(" 1.Sort by number\n\n");
printf(" 2.Sort by dormitary\n\n");
printf(" 3.Sort by floor\n\n");
printf(" 4.Sort by building\n\n");
printf(" 0.Return the main menu\n\n");
printf(" Please choice(0-4):");
scanf("%d",&choice);
switch(choice)
{ case 1:sort_num();output(h);break; /*调用output_message()使排好的数据输出*/
case 2:sort_dormitary();output(h);break;
case 3:sort_floor();output(h);break;
case 4:sort_building();output(h);break;
case 0:break;
}
}while(choice!=0);
}
/*按宿舍号统计*/
count dormitary()
{ struct stud *p;
int dor;
int i=0;
clrscr();
printf("\n\nPlease input the dormitary what you want to count:\n");
scanf("%d",&dor);
clrscr();
printf("\n\n*************************Count by dormitary***********************************\n");
printf("\n\nnumber name sex age major grade class building floor dormitary\n\n");
p=h;
while(p!=NULL)
{ if(p->dormitary==dor)
{ printf("%6d%7s%7s%6d%8s%8d%8d%10d%7d%11d\n",p->num,p->name,p->sex,p->age,p->major,p->grade,p->classes,p->building,p->floor,p->dormitary);
i++;
}
p=p->next;
}
printf("\nThe total:%d",i);
printf("\n\n\n\n\ press any key to the main meue!!!!\n");
bioskey(0);
}
/*统计模块*/
count message()
{
int choice;
do
{ clrscr();
printf("\n\n\n ~~~~~~~~'Count message~~~~~~~~\n\n");
printf(" 1.Count by dormitary\n\n");
printf(" 2.Count by floor\n\n");
printf(" 3.Count by building\n\n");
printf(" 0.Return the main menu\n\n");
printf(" Please choice(0-3):");
scanf("%d",&choice);
switch(choice)
{ case 1:count_dormitary();break;
case 2:count_floor();break;
case 3:count_building();break;
case 0:break;
}
}while(choice!=0);
}
/*主函数*/
void main()
{
int choice;
int key;
printf("Please input the right key:\n");
scanf("%d",&key);
if(key==0)
{ read_message();
do
{
clrscr();
printf("\n\n\n ~~~~~~~XUE SHENG GONG YU GUAN LI XI TONG ~~~~~~~\n\n");
printf(" 1.Input student information\n\n");
printf(" 2.Output student information\n\n");
printf(" 3.Renew student information\n\n");
printf(" 4.Inquire student information\n\n");
printf(" 5.Sort student information\n\n");
printf(" 6.Count student information\n\n");
printf(" 0.exit the system\n\n");
printf(" **************************************************\n\n");
printf(" Please choice(0-6):");
scanf("%d",&choice);
switch(choice)
{
case 1:input message();break;
case 2:output message(h);break;
case 3:renew message();break;
case 4:inquire message();break;
case 5:sort message();break;
case 6:count message();break;
case 0:break;
}
}while(choice!=0);
save message(h); /*退出程序时对数据进行保存*/
}
}