宿舍管理系统_宿舍人员管理系统
宿舍管理系统由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“宿舍人员管理系统”。
附件B:宿舍管理系统源代码
#include “stdio.h” #include “stdlib.h”
#define SIZE 1000
char grade;
typedef struct StuNode{
char num[11];
char name[20];
char sex[2];
char birth[11];
char hometn[13];
char dorNum[7];
char dorTel[8];
struct StuNode *next;}StuNode,*StuList;
int readToList(StuList sl,FILE *fp){
StuList p;
int i=0;
while(1){
p=(StuList)malloc(sizeof(StuNode));
if(fread(p,sizeof(StuNode),1,fp)!=1)break;
p->next=sl->next;
sl->next=p;
i++;
}
fclose(fp);
return i;}
void addNode(){
FILE *fp;
StuList sl,p,q;
if((fp=fopen(“stu_list”,“rb”))==NULL){ /*the file doesn't exist*/
p=(StuList)malloc(sizeof(StuNode));
printf(“Please enter the student's information:n”);
scanf(“%s%s%s%s%s%s%s”,&p->num,&p->name,&p->sex,&p->birth,&p->hometn,&p->dorNum,&p->dorTel);
getchar();
p->next=NULL;
if((fp=fopen(“stu_list”,“wb”))==NULL){
printf(“cannot open filen”);
return;
}
else{
if(fwrite(p,sizeof(StuNode),1,fp)!=1){
printf(“file write errorn”);
return;
}
}
fclose(fp);
}
else{
sl=(StuList)malloc(sizeof(StuNode));
sl->next=NULL;
readToList(sl,fp);
p=(StuList)malloc(sizeof(StuNode));
printf(“Please enter the student's information:n”);
scanf(“%s%s%s%s%s%s%s”,&p->num,&p->name,&p->sex,&p->birth,&p->hometn,&p->dorNum,&p->dorTel);
getchar();
q=sl->next;
while(q){
if(strcmp(q->num,p->num)==0){
printf(“This student %s existed!Pre Enter to continue....”,p->num);
getchar();
clrscr();
return;
}
else q=q->next;
}
p->next=sl->next;
sl->next=p;
p=sl->next;
if((fp=fopen(“stu_list”,“wb”))==NULL){
printf(“cannot open filen”);
return;
}
else{
while(p){
if(fwrite(p,sizeof(StuNode),1,fp)!=1){
printf(“file write errorn”);
return;
}
p=p->next;
}
}
fclose(fp);
}
printf(“nSucce!
Pre Enter to continue....”);
getchar();
clrscr();}
void delNode(){
FILE *fp;
StuList sl,p,q;
char num[11];
int flag=1;
printf(“Please enter the student's num:”);
scanf(“%s”,&num);
getchar();
sl=(StuList)malloc(sizeof(StuNode));
sl->next=NULL;
if((fp=fopen(“stu_list”,“rb”))==NULL){
printf(“cannot open filen”);
return;
}
readToList(sl,fp);
p=sl;
while(p){
q=p->next;
if(strcmp(q->num,num)==0){
p->next=q->next;
free(q);
flag=0;
}
else p=p->next;
}
if(flag==1){
printf(“Not exist this student--%s!Pre Enter to continue....”,num);
getchar();
clrscr();
return;
}
else if((fp=fopen(“stu_list”,“wb”))==NULL){
printf(“cannot open filen”);
return;
}
else{
p=sl->next;
while(p){
if(fwrite(p,sizeof(StuNode),1,fp)!=1){
printf(“file write errorn”);
return;
}
p=p->next;
}
fclose(fp);
}
printf(“nSucce!
Pre Enter to continue....”);
getchar();
clrscr();}
void editNode(){
FILE *fp;
StuList sl,p;
char num[11];
int flag=1;
printf(“Please enter the student's num:”);
scanf(“%s”,&num);
getchar();
sl=(StuList)malloc(sizeof(StuNode));
sl->next=NULL;
if((fp=fopen(“stu_list”,“rb”))==NULL){
printf(“cannot open filen”);
return;
}
readToList(sl,fp);
p=sl->next;
while(p){
if(strcmp(num,p->num)==0){
printf(“nThe student's old information is:n%s %s %s %s %s %s %snPlease enter the student's new information:n”,p->num,p->name,p->sex,p->birth,p->hometn,p->dorNum,p->dorTel);
scanf(“%s%s%s%s%s%s%s”,&p->num,&p->name,&p->sex,&p->birth,&p->hometn,&p->dorNum,&p->dorTel);
getchar();
flag=0;
break;
}
else p=p->next;
}
if(flag){
printf(“Not exist this student--%s!Pre Enter to continue....”,num);
getchar();
clrscr();
return;
}
else if((fp=fopen(“stu_list”,“wb”))==NULL){
printf(“cannot open filen”);
return;
}
else{
p=sl->next;
while(p){
if(fwrite(p,sizeof(StuNode),1,fp)!=1){
printf(“file write errorn”);
return;
}
p=p->next;
}
fclose(fp);
}
printf(“nSucce!
Pre Enter to continue....”);
getchar();
clrscr();}
void sort(StuList sl[],int n,char key[]){
int i,j,k;
if(strcmp(key,“num”)==0){
for(i=1;i
k=i;
for(j=i+1;j
if(strcmp(sl[j]->num,sl[k]->num)
if(k!=i){
sl[0]=sl[i];
sl[i]=sl[k];
sl[k]=sl[0];
}
}
}
if(strcmp(key,“name”)==0){
for(i=1;i
k=i;
for(j=i+1;j
if(strcmp(strlwr(sl[j]->name),strlwr(sl[k]->name))
if(k!=i){
sl[0]=sl[i];
sl[i]=sl[k];
sl[k]=sl[0];
}
}
}
if(strcmp(key,“dorNum”)==0){
for(i=1;i
k=i;
for(j=i+1;j
if(strcmp(sl[j]->dorNum,sl[k]->dorNum)
if(k!=i){
sl[0]=sl[i];
sl[i]=sl[k];
sl[k]=sl[0];
}
}
} }
void scan(char key[]){
FILE *fp;
StuList sortary[SIZE],sl,p;
int i,n;
sl=(StuList)malloc(sizeof(StuNode));
sl->next=NULL;
if((fp=fopen(“stu_list”,“rb”))==NULL){
printf(“cannot open filen”);
return;
}
n=readToList(sl,fp);
p=sl->next;
for(i=1;i
sortary[i]=p;
p=p->next;
}
sort(sortary,n,key);
printf(“n
num
name
sex
birth
hometown
dorNum dorTeln”);
printf(“---------------n”);
for(i=1;i
printf(“%-11s %-19s%-2s %-11s %-13s %-7s %-8sn”,sortary[i]->num,sortary[i]->name,sortary[i]->sex,sortary[i]->birth,sortary[i]->hometn,sortary[i]->dorNum,sortary[i]->dorTel);
}
printf(“---------------n”);
printf(“Pre Enter to continue...”);
getchar();}
void search(char key[],char value[]){
FILE *fp;
StuList sortary[SIZE],sl,p;
int i,n,low,high,mid,flag=1;
sl=(StuList)malloc(sizeof(StuNode));
sl->next=NULL;
if((fp=fopen(“stu_list”,“rb”))==NULL){
printf(“cannot open filen”);
return;
}
n=readToList(sl,fp);
p=sl->next;
for(i=1;i
sortary[i]=p;
p=p->next;
}
sort(sortary,n,key);
low=1;high=n;
while(low
mid=(low+high)/2;
if(strcmp(value,sortary[mid]->num)==0){
printf(“The student's information is:n”);
printf(“%-11s%-19s%-2s%-11s%-13s%-7s%-8sn”,sortary[mid]->num,sortary[mid]->name,sortary[mid]->sex,sortary[mid]->birth,sortary[mid]->hometn,sortary[mid]->dorNum,sortary[mid]->dorTel);
flag=0;
break;
}
else if(strcmp(strlwr(value),strlwr(sortary[mid]->name))==0){
printf(“Result set:n”);
printf(“%-11s%-19s%-2s%-11s%-13s%-7s%-8sn”,sortary[mid]->num,sortary[mid]->name,sortary[mid]->sex,sortary[mid]->birth,sortary[mid]->hometn,sortary[mid]->dorNum,sortary[mid]->dorTel);
for(i=mid+1;strcmp(strlwr(value),strlwr(sortary[i]->name))==0;i++)
printf(“%-11s%-19s%-2s%-11s%-13s%-7s%-8sn”,sortary[mid]->num,sortary[mid]->name,sortary[mid]->sex,sortary[mid]->birth,sortary[mid]->hometn,sortary[mid]->dorNum,sortary[mid]->dorTel);
for(i=mid-1;strcmp(strlwr(value),strlwr(sortary[i]->name))==0;i--)
printf(“%-11s%-19s%-2s%-11s%-13s%-7s%-8sn”,sortary[mid]->num,sortary[mid]->name,sortary[mid]->sex,sortary[mid]->birth,sortary[mid]->hometn,sortary[mid]->dorNum,sortary[mid]->dorTel);
flag=0;
break;
}
else if(strcmp(value,sortary[mid]->dorNum)==0){
printf(“Result set:n”);
printf(“%-11s%-19s%-2s%-11s%-13s%-7s%-8sn”,sortary[mid]->num,sortary[mid]->name,sortary[mid]->sex,sortary[mid]->birth,sortary[mid]->hometn,sortary[mid]->dorNum,sortary[mid]->dorTel);
for(i=mid+1;strcmp(value,sortary[i]->dorNum)==0;i++)
printf(“%-11s%-19s%-2s%-11s%-13s%-7s%-8sn”,sortary[i]->num,sortary[i]->name,sortary[i]->sex,sortary[i]->birth,sortary[i]->hometn,sortary[i]->dorNum,sortary[i]->dorTel);
for(i=mid-1;strcmp(value,sortary[i]->dorNum)==0;i--)
printf(“%-11s%-19s%-2s%-11s%-13s%-7s%-8sn”,sortary[i]->num,sortary[i]->name,sortary[i]->sex,sortary[i]->birth,sortary[i]->hometn,sortary[i]->dorNum,sortary[i]->dorTel);
flag=0;
break;
}
else if((strcmp(key,“num”)==0)&&(strcmp(value,sortary[mid]->num)
else if((strcmp(key,“name”)==0)&&(strcmp(strlwr(value),strlwr(sortary[mid]->name))
else if((strcmp(key,“dorNum”)==0)&&(strcmp(value,sortary[mid]->dorNum)
else low=mid+1;
}
if(flag)printf(“No result!n”);
printf(“Pre Enter to continue...”);
getchar();
clrscr();}
void printMenu(){
printf(“
******************************************n”);
printf(“
1.Add one student's record.n”);
printf(“
2.Delete one student's record.n”);
printf(“
3.Edit one student's record.n”);
printf(“
4.Scan all records ordered by num.n”);
printf(“
5.Scan all records ordered by name.n”);
printf(“
6.Scan all records ordered by dorNum.n”);
printf(“
7.Search one student's record.n”);
printf(“
8.Exit.n”);
printf(“
**************************************************n”);
printf(“Please enter your choice(1~8):”);
grade=getchar();
getchar();}
void main(){
char key[7],value[20];
while(1){
printMenu();
switch(grade){
case'1':addNode();break;
case'2':delNode();break;
case'3':editNode();break;
case'4':clrscr();scan(“num”);break;
case'5':clrscr();scan(“name”);break;
case'6':clrscr();scan(“dorNum”);break;
case'7':clrscr();
printf(“Please enter the key and value(eg:num 0606054230/name ZhangSan/dorNum 030615):n”);
scanf(“%s%s”,&key,&value);
while((strcmp(key,“num”)!=0)&&(strcmp(key,“name”)!=0)&&(strcmp(key,“dorNum”)!=0)){
printf(“Wrong key!It must be num/name/dorNum:n”);
scanf(“%s%s”,&key,&value);
getchar();
}
getchar();
clrscr();
search(key,value);
break;
case'8':exit(0);
default:clrscr();
printf(“n Have no this choice--%c!Pre Enter to continue...”,grade);
getchar();
clrscr();
}
} }