《C语言大作业——学生通讯录管理系统.doc》由会员分享,可在线阅读,更多相关《C语言大作业——学生通讯录管理系统.doc(12页珍藏版)》请在三一文库上搜索。
1、#include #include /#define NULL 0#define LEN sizeof(struct message)struct message /定义结构体 char name15; char number15; char phone15; char qq13; char addr25; struct message *next; /指向下一数据;int n;void creat() /建立电话簿 int num;char choice5=2; FILE *fp; struct message *head; struct message *p,*q; n = 0; p =
2、q = (struct message *) malloc(LEN); fp=fopen(通讯录1.txt,wb); system(cls); printf(n请输入姓名:); scanf(%s,p-name); printf(n请输入电话号码:); scanf(%s,p-phone); printf(n请输入学号:); scanf(%s,p-number); printf(n请输入QQ:); scanf(%s,p-qq); printf(n请输入住址:); scanf(%s,p-addr); fwrite(p,LEN,1,fp); fclose(fp); head = 0; num = 1;
3、 while(num!=0) n = n+1; if(n=1) head = p; else q-next = p; q = p; p = (struct message *) malloc(LEN); /分配存储区 while(choice0!=1 & choice0!=0) /判断是否继续 printf(n1 继续输入n 0 返回n); printf(请选择操作:); scanf(%s,choice); switch(choice0) case 1: fp=fopen(通讯录1.txt,rb); system(cls); printf(n请输入姓名:); scanf(%s,p-name);
4、 printf(n请输入电话号码:); scanf(%s,p-phone); printf(n请输入学号:); scanf(%s,p-number); printf(n请输入QQ:); scanf(%s,p-qq); printf(n请输入住址:); scanf(%s,p-addr); fwrite(p,LEN,1,fp); fclose(fp); choice0 = 2; continue; case 0: num = 0; system(cls); q-next = 0;void add() /添加通讯录 int num;char choice5=2; FILE *fp; struct m
5、essage *head; struct message *p,*q; n = 0; p = q = (struct message *) malloc(LEN); /分配空间 fp=fopen(通讯录1.txt,ab); system(cls); printf(n请输入姓名:); /输入内容 scanf(%s,p-name); printf(n请输入电话号码:); scanf(%s,p-phone); printf(n请输入学号:); scanf(%s,p-number); printf(n请输入QQ:); scanf(%s,p-qq); printf(n请输入住址:); scanf(%s,
6、p-addr); fwrite(p,LEN,1,fp); fclose(fp); head = 0; num = 1; while(num!=0) n = n+1; if(n=1) head = p; else q-next = p; q = p; p = (struct message *) malloc(LEN); /分配空间 while(choice0!=1 & choice0!=0) /判断是否继续 printf(n1 继续输入n 0 返回n); printf(请选择操作:); scanf(%s,choice); switch(choice0) case 1: fp=fopen(通讯录
7、1.txt,rb); system(cls); printf(n请输入姓名:); scanf(%s,p-name); printf(n请输入电话号码:); scanf(%s,p-phone); printf(n请输入学号:); scanf(%s,p-number); printf(n请输入QQ:); scanf(%s,p-qq); printf(n请输入住址:); scanf(%s,p-addr); fwrite(p,LEN,1,fp); fclose(fp); choice0 = 2; continue; case 0: num = 0; system(cls); q-next = 0;vo
8、id findname(struct message * fphead) /按姓名查找 struct message *p; int a = 0; char findname20; system(cls); printf(请输入要查找的姓名:n); scanf(%s,findname); for(p=fphead-next;p!=NULL;p=p-next) if(strcmp(p-name,findname)=0) printf(姓名 电话号码 学号 QQ 住址n); printf(%-15s %-15s %-15s %-13s %-25sn,p-name,p-phone,p-number,
9、p-qq,p-addr); a = 1; if(a != 1) printf(无此通讯录!n); void findphone(struct message * fphead) /按电话查找 struct message *p; int a = 0; char findphone15; system(cls); printf(请输入要查找的电话:n); scanf(%s,findphone); for(p=fphead-next;p!=NULL;p=p-next) if(strcmp(p-phone,findphone)=0) printf(姓名 电话号码 学号 QQ 住址n); printf
10、(%-15s %-15s %-15s %-13s %-25sn,p-name,p-phone,p-number,p-qq,p-addr); a = 1; if(a != 1) printf(无此通讯录!n); void findnumber(struct message * fphead) /按学号查找 struct message *p; int a = 0; char findnumber15; system(cls); printf(请键入要查找的学生学号:n); scanf(%s,findnumber); for(p=fphead-next;p!=NULL;p=p-next) if(s
11、trcmp(p-number,findnumber)=0) printf(姓名 电话号码 学号 QQ 住址n); printf(%-15s %-15s %-15s %-13s %-25sn,p-name,p-phone,p-number,p-qq,p-addr); a = 1; if(a != 1) printf(无此通讯录!n); void modify(struct message * fphead) /修改记录 FILE *fp; struct message *p,*q; int a = 0; char findname15; system(cls); printf(请键入要查找的姓名
12、:n); scanf(%s,findname); for(p=fphead-next;p!=NULL;p=p-next) if(strcmp(p-name,findname)=0) printf(姓名 电话号码 学号 QQ 住址n); printf(%-15s %-15s %-15s %-13s %-25snnnn,p-name,p-phone,p-number,p-qq,p-addr); printf(n请键入新姓名:); scanf(%s,p-name); printf(n请键入新电话号码:); scanf(%s,p-phone); printf(n请键入新学号:); scanf(%s,p
13、-number); printf(n请键入新QQ:); scanf(%s,p-qq); printf(n请键入新住址:); scanf(%s,p-addr); fp = fopen(通讯录2.txt,wb); q = fphead-next; /P为链表头指针 while(q!=0) fwrite(q,LEN,1,fp); if(q-next!=0) q = q-next; else q = 0; fclose(fp); unlink(通讯录1.txt); /用新文件覆盖原文件 rename(通讯录2.txt, 通讯录1.txt); printf(修改成功!); a = 1; if(a !=
14、1) printf(无此通讯录!n); void del(struct message * fphead) /删除记录 FILE *fp,*fq; struct message *p,*q,*r; char sname15; p = q = (struct message *) malloc(LEN); p = fphead; system(cls); fp = fopen(通讯录1.txt,rb); fq = fopen(通讯录2.txt,wb); printf(请输入欲删除记录的姓名:); scanf(%s,sname); while(strcmp(p-name,sname)!=0 & p
15、-next!=0) /查找节点并删除该节点 q = p; p = p-next; if(strcmp(p-name,sname)=0) if(p=fphead) fphead = p-next; else q-next = p-next; r = fphead-next; /r为链表头指针 while(r!=0) fwrite(r,LEN,1,fq); if(r-next!=0) r = r-next; else r = 0; printf(删除成功!); else printf(无此通讯录!); fclose(fp); fclose(fq); unlink(通讯录1.txt); /用新文件覆
16、盖原文件 rename(通讯录2.txt, 通讯录1.txt); struct message * open(void) /打开文件,载入链表 FILE *fp; struct message *p=NULL,*q=NULL,*temp=NULL,*fphead=NULL; fp=fopen(通讯录1.txt,rb); fphead=(struct message *)malloc(LEN); /分配空间 temp = q = fphead; while(! feof(fp) /循环读取,载入链表 p=(struct message *)malloc(LEN); temp=q; q-next=
17、p; q=p; fread(p,LEN,1,fp); temp-next=NULL; fclose(fp); return(fphead); /返回链表头指针 void print() /显示通讯录 struct message *p; FILE *fp; system(cls); if(fp=fopen(通讯录1.txt,rb)!=NULL) printf(姓名 电话号码 学号 QQ 住址n); p = (struct message *)malloc(LEN); /分配空间 while(!feof(fp) fread(p,LEN,1,fp); printf(%-15s %-15s %-15
18、s %-13s %-25sn,p-name,p-phone,p-number,p-qq,p-addr); fclose(fp); else printf(未建立通讯录!); void main() /主函数 FILE * fp; struct message * fphead; int begin = 1,f; char choice5; while(begin = 1) printf(ttn); printf(tttt欢迎使用学生通讯录n); printf(ttnnn); printf(ttt*主窗口菜单*nn); printf(ttt1:显示通讯录中所有记录;nn); printf(ttt
19、2:建立新通讯录;nn); printf(ttt3:添加新记录;nn); printf(ttt4:查询通讯录中的记录;nn); printf(ttt5:修改通讯录中的记录;nn); printf(ttt6:删除通讯录中的记录;nn); printf(ttt0:退出通讯录nn); printf(请选择操作:); scanf(%s,choice); switch(choice0) case 1: print(); printf(按任意键返回主菜单!n); getch(); system(cls); continue; case 2: creat(); continue; case 3: add()
20、; continue; case 4: if(fp = fopen(通讯录1.txt,rb) != NULL) fclose(fp); system(cls); printf(1按姓名查询;n2按电话查询;n3按学号查询;n); printf(请输入查询方式:); scanf(%d,&f); if(f=1) fphead = open(); findname(fphead); if(f=2) fphead = open(); findphone(fphead); else if(f=3) fphead = open(); findnumber(fphead); else system(cls)
21、; printf(未建立通讯录!); printf(按任意键返回主菜单!n); getch(); system(cls); continue; case 5: if(fp = fopen(通讯录1.txt,rb) != NULL) fclose(fp); fphead = open(); modify(fphead); else system(cls); printf(未建立通讯录!); printf(按任意键返回主菜单!n); getch(); system(cls); continue; case 6: if(fp = fopen(通讯录1.txt,rb) != NULL) fclose(fp); fphead = open(); del(fphead); else system(cls); printf(未建立通讯录!); printf(按任意键返回主菜单!n); getch(); system(cls); continue; case 0: exit(0); default: system(cls); printf(输入错误,按任意键返回主菜单!n); getch(); system(cls); system(pause);
链接地址:https://www.31doc.com/p-10128548.html