第一篇:C语言程序设计学生通讯录管理系统
#include “stdio.h” #include “stdlib.h” #include “string.h” #include “conio.h” #include “stdlib.h” #define null 0 struct record { char name[20];char phone[20];char adress[40];char postcode[10];char e_mail[30];}student[500];struct LinkList { struct record US;struct LinkList *next;}a;struct LinkList *head=null;int num=0;FILE *fp;int menu_select();int adduser();int list();int search();int display();int add();int listbyname();int dele();int save();int exit();
void main(){
system(“cls”);for(;;){ switch(menu_select()){ case 0:adduser();break;case 1:list();break;case 2:search();break;case 3:add();break;case 4:dele();break;case 5:save();break;case 6:exit(0);} } } menu_select(){ char s[80];int a;printf(“*_* press any key enter menu!*_* n”);getch();system(“cls”);printf(“tt********************MENU*********************nn”);printf(“tt 0.输入记录n”);printf(“tt 1.显示记录 n”);printf(“tt 2.按姓名查找n”);printf(“tt 3.插入记录 n”);printf(“tt 4.删除记录n”);printf(“tt 5.记录保存文件n”);printf(“tt 6.Quitn”);printf(“tt***********************************************n”);do{ printf(“n Enter you choice(0~11):”);scanf(“%s”,s);a=atoi(s);} while(a<0||a>11);return a;}
adduser(){ printf(“ntt**************** 请输入用户信息 ****************n”);printf(“ntt输入姓名:”);scanf(“%s”,&student[num].name);printf(“ntt输入电话号码:”);scanf(“%s”,&student[num].phone);printf(“ntt输入地址:”);scanf(“%s”,&student[num].adress);printf(“ntt输入邮编:”);scanf(“%s”,&student[num].postcode);printf(“ntt输入e-mail:”);scanf(“%s”,&student[num].e_mail);num++;printf(“ntt是否继续添加?(Y/N):”);if(getch()=='y')adduser();return(0);} list(){ int i;system(“cls”);if(num!=0){ printf(“ntt*************** 以下为通讯录所有信息************”);for(i=0;i printf(“ntt姓名: %s”,student[i].name);printf(“ntt电话: %s”,student[i].phone);printf(“ntt地址: %s”,student[i].adress);printf(“ntt邮编: %s”,student[i].postcode);printf(“ntte-mail:%s”,student[i].e_mail);printf(“tt”);if(i+1 add(){ int i;if((fp=fopen(“student.bin”,“wb”))==NULL){ printf(“ntt文件打开失败”);} for(i=0;i save(){ int j;FILE*fp;fp=fopen(“student.txt”,“w”);if(fp==NULL)printf(“can't open the file.”);if(num!=0){ for(j=0;j fwrite(student,sizeof(student),1,fp);} } printf(“保存成功!”);fclose(fp);return(0);} “学生通讯信息记录系统”的设计与实现 一、设计要求 1.问题的描述 “学生通讯信息记录系统”是为了实现快速的对学生信息进行录入、删除、查找、显示。各个功能靠函数实现。2.需求分析 (1)应该包括以下功能:输入信息、显示信息、查找以姓名作为关键字、删除信息(2)作为一个完整的系统,应具有友好的界面和较强的容错能力 二、概要设计 1.主界面设计 2.储存结构设计 本系统主要采用链表类型来表示储存“学生信息记录系统”中的信息。程序中定义了address结构。其中,包括学生的姓名、宿舍信息和学号。3.系统功能的设计 1)输入信息——enter();2)显示信息———display();3)查找以姓名作为关键字 ———search();4)删除信息———delete(); 三、模块设计 1.模块设计 本成绩包含两个模块:主程序模块和链表操作模块。2.系统的程序及功能设计 (1)插入学生信息 void enter() /*输入函数,本函数循环输入资料,当输入姓名为空时退出*/ { struct address *info; /*定义当前结点*/ for(;;){ info=(struct address *)malloc(sizeof(struct address)); /*为当前结点分配空间*/ if(!info) { printf(“n Out of memory”); exit(0); /*如果分配空间失败,退出程序*/ } printf(“输入空姓名结束:n”); inputs(“请输入 姓名:”,info->name,10); if(!info->name[0]) break; /*如果输入姓名为空,结束循环*/ inputs(“请输入 院系:”,info->street,50); inputs(“请输入宿舍楼:”,info->city,15); inputs(“请输入宿舍号:”,info->state,15); inputs(“请输入 学号:”,info->eip,7); insert(info,&start,&last); /*调用结点插入函数*/ } } 五、测试分析 1.输入学生信息 4.删除信息 5.退出 struct address *start; /*首结点*/ struct address *last; /*尾结点*/ struct address *find(char *); /*声明查找函数*/ void enter(); /*函数声明*/ void search();void save(); void load();void list();void ddelete(struct address **start,struct address **last);void insert(struct address *i,struct address **start,struct address **last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void); void main(){ int c; printf(“n 欢迎使用学生通讯录系统”); printf(“nn”); printf(“t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓n”); printf(“t┃************************************************************┃n”); printf(“t┃* * *┃n”); printf(“t┃* 1.输入信息 * 2.删除信息 *┃n”); printf(“t┃* * *┃n”); printf(“t┃************************************************************┃n”); printf(“t┃* * *┃n”); printf(“t┃* 3.显示信息 * 4.查找 *┃n”); printf(“t┃* * *┃n”); printf(“t┃************************************************************┃n”); printf(“t┃ 5.退出 ┃ n”); printf(“t┃************************************************************┃n”); exit(0); /*如果分配空间失败,退出程序*/ } printf(“输入空姓名结束:n”); inputs(“请输入 姓名:”,info->name,10); if(!info->name[0])break; /*如果输入姓名为空,结束循环*/ inputs(“请输入 院系:”,info->street,50); inputs(“请输入宿舍楼:”,info->city,15); inputs(“请输入宿舍号:”,info->state,15); inputs(“请输入 学号:”,info->eip,7); insert(info,&start,&last); /*调用结点插入函数*/ } void inputs(char *prompt,char *s,int count) /*输入函数,有越界检测功能*/ { char p[255]; do } i->next=NULL; i->prior=NULL; *last=i; *start=i; return; } else { (*last)->next=i; i->prior=*last;i->next=NULL; *last=(*last)->next; } } void ddelete(struct address **start,struct address **last) /*删除函数*/ { struct address *info; char s[80]; inputs(“请输入 姓名:”,s,10); /*输入欲删除结点的name域内容*/ info=find(s); if(info) { printf(“Deleting......n”);if(*start==info) 点的下驱作为新的首结点(入口)*/ { *start=info->next; if(*start)(*start)->prior=NULL; else *last=NULL; } else 结点*/ { info->prior->next=info->next; info=info->next; } printf(“未找到相关信息.n”); return NULL;} /*输出整个链表*/ void list(void){ struct address *info; info=start; if(info==NULL)printf(“当前记录为空!”);else printf(“姓名t院系t宿舍楼t宿舍号t学号tn”); while(info) { };display(info);if(info->next==NULL){break;} info=info->next; printf(“nn”);} /*查找函数*/ /*输入欲查找的姓名*/ /*如果没找到,显示Not found*/ /*如果找到,显示该结点资料*/ 七、用户使用手册 (1)本程序的执行文件为“学生通讯录管理系统.exe”。 (2)进入本系统之后,随即显示系统住菜单界面。用户可以在该界面下根据提示输入并按回车键确定,执行相应的菜单命令。 (3)本系统可以对学生信息进行录入和删除。 数据结构课程设计 课题:学生成绩管理系统 姓名:孙轩宇 学号:E01014316 专业:计算机科技 院系:计科院 2010.10.8 班级:10 #include intfind_record(int flag);intdelete_record(int flag);voidpaixu_record(int flag);intsave_record(int flag);void main(){ for(;;){ switch(menu_select()) { case 1: printf(“ ***********************************************n”);printf(“ ************** 通讯录的建立 ***************n”);printf(“ ***********************************************n”);flag=create_record();break;case 2: printf(“ ***********************************************n”);printf(“ ************** 通讯录信息的添加 *****************n”);printf(“ ***********************************************n”);flag=add_record(flag);break;case 3: printf(“ ******************************n”);printf(“ ******* 通讯录信息查询 *******n”);printf(“ ******************************n”);find_record(flag); break;case 4: printf(“ ***********************************n”);printf(“ **********通讯信息的删除***********n”);printf(“ ***********************************n”);delete_record(flag);break;case 5: printf(“ ***********************************n”);printf(“ **********通讯录的存储(D:)*********n”);printf(“ ***********************************n”);save_record(flag);break;case 6: printf(“ ***********************************n”);printf(“ **********通讯者的排序*********n”);printf(“ ***********************************n”);paixu_record(flag);break;case 0: printf(“t 谢谢您的使用!n”);break; default : break;} } } intmenu_select(){ int i;printf(“ ******************** n”);printf(“ Welcome! n ”);printf(“ Form kuangminn”);printf(“ ******************** n”);printf(“ n”);printf(“ n”);printf(“ n”);printf(“ 通讯录管理系统 n”);printf(“ n”);printf(“ ======================n”);printf(“ 1.通讯录的建立n”);printf(“ 2.通讯者的添加n”);printf(“ 3.通讯录的查询n”);printf(“ 4.通讯者的删除n”);printf(“ 5.通讯录的存储n”);printf(“ 6.通讯者的排序n”);printf(“ 0.退出通讯录管理系统n”);printf(“ ======================n”);printf(“ 请选择操作0-5 nn”);for(;;){ scanf(“%d”,&i);if(i<0||i>6)printf(“t对不起,您的输入错误n”);else break;} return i;} intcreate_record(){inti,j;for(i=0;;) { printf(“ 学号(12)姓名(10)出生年月(10)家庭住址(30)邮编(10)电话(15)n”);printf(“-------------n”);scanf(“%s%s%s%s%s%s”,data[i].num,data[i].name,data[i].birthday, data[i].post, data[i].phone);i++;printf(“ 想继续创建吗?(1.是/0.不):”);scanf(“%d”,&j);if(!j) return i;else printf(“恭喜你,创建成功!请继续创建!n”); } return i;} intadd_record(int flag){ int i=flag,j;for(i;;) { printf(“ 学号(12)姓名(10)出生年月(10)家庭住址(30)邮编(10)电话(15)n”);printf(“-------------n”); scanf(“%s%s%s%s%s%s”,data[i].num,data[i].name,data[i].birthday,data[i].post, data[i].phone);i++;printf(“ 想继续添加吗?(1.是/0.不):”);scanf(“%d”,&j);if(!j)return i;else printf(“恭喜你,添加成功!请继续添加!n”); } return(i);} intfind_record(){ int i;char number[6];char named[10];intxz;printf(“--------------------n”);printf(“ 1.按学号查询n”);printf(“ 2.按姓名查询n”);printf(“--------------------n”);printf(“ 请选择 : n”); scanf(“%d”,&xz);if(xz==1){ printf(“ 请输入要查找的学号: ”);scanf(“%s”,number);for(i=0;i if(strcmp(data[i].num,number)==0) { printf(“ ** 学号姓名出生年月家庭住址邮编电话**n”);printf(“------------------------------n”);printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”);return 0;} } else if(xz=2){ printf(“请输入要查找的姓名: ”);scanf(“%s”,named);for(i=0;i { printf(“ ** 学号姓名出生年月家庭住址邮编电话**n”);printf(“------------------------------n”);printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”);return 0;else {printf(“对不起,没有你要找的人!n”);return 0;} } else {printf(“对不起,没有你要找的人!n”);return 0;} } } intdelete_record(int flag) { inti,j;intdeletemark=0;char number[20];printf(“ttt请输入要删除学号:n”);scanf(“%s”,number);for(i=0;i { if(strcmp(data[i].num, number)==0) { printf(“ttt以下是您要删除的用户纪录:n”);printf(“ ** 学号姓名出生年月家庭住址邮编电话**n”);printf(“------------------------------n”); printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”); printf(“ttt是否删除?(y/n)”);if(getch()=='y' || getch()=='Y') { for(j=i;j } else return; } continue; } if(deletemark==0) { printf(“ttt没有该用户的纪录”); return; } return; } voidpaixu_record(int flag){inti,j;struct record tmp; printf(“ 1.按姓名排序n”);printf(“ 2.按学号排序n”);scanf(“%d”,&i);if(i==1){for(i=1;i { if(strcmp(data[i].name, data [i-1].name)<0) { tmp= data[i]; j=i-1;do { data [j+1]= data [j];j--;}while((strcmp(tmp.name, data [j].name)<0&&j>=0));data [j+1]=tmp; } } printf(“ttt排序成功!”);} if(i==2){for(j=0;j {tmp=data[i];data[i]=data[i+1];data[i+1]=tmp;} } } intsave_record(int flag){ FILE*fp;int i;if((fp=fopen(“D:data.txt”,“w+”))==NULL) {printf(“无法打开文件!”);exit(0);} for(i=0;i {fprintf(fp,“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday, data[i].post, data[i].phone);printf(“n”);} fclose(fp);return 0;} C语言课程设计学生通讯录管理系统设计 一、题目内容的描述 学生通讯录管理系统设计 设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电话号码等等),通信录数据类型定义为结构体类型。由键盘输入数据(最好要考虑输入数据输入的格式及输入数据的有效性),然后进行以下的功能实现。程序要求主函数是一个功能选择菜单,其它各功能都用各自的函数实现。 功能要求如下: 1、能建立、修改和增删学生通讯录 2、能够按多种方式进行查询,例如按姓名、按电话号码等。 3、通讯录的数据保存在文件中,运行程序时将通讯录数据从文件读取到内存中。对通讯录进行增加、删除、修改学生数据后,提供功能菜单,可以将内存中修改过的通讯录重新保存至文件。 二、应用程序功能的详细说明 1、应用程序实现了可视化的系统操作界面。 2、对学生通讯录形成了系统化的管理,操作简便明了。 3、程序具有系统帮助,添加、显示、查询、刷新、删除、排序、保存、修改、读取学生通讯录的功能。各项功能均可按照文字提示操作,浅显易懂。 4、系统的各个功能模块都用函数的形式来实现(readfile()、seek()、modify()、sort()、insert()、del()、save()、menu())方便查看。 5.可以将信息保存在文件(“student.txt“)中,亦可将信息从文件中读取出来,灵活方便。 三、主要模块的算法描述 学生通讯录管理系统 刷新学生信息readfile() 查询学生信息seek() 增加学生信息insert() 显示学生信息display() 退出系统 修改学生信息modify() 删除学生信息del() 保存当前学生信息save() 汇总当前学生数目number() 系统帮助help() 查询学生信息 按姓名查询 退出 按学号查询 开始 以可读写的方式打开一个数据文件 将此文件的内容读出,并存入一个新的结构体类型的数组中。 调用menu()菜单函数 进入while()主循环 输入1-8中的一数值,选择相应操作。 输入是否为0 判断键值,调用相应函数,完成相应功能。 是否已对修改存盘 调用函数save()函数,进行写数据文件操作 结束 模块一:头文件,变量定义,函数的声明 对系统所使用的变量进行定义,对函数进行声明。 模块二:录入学生信息 声明函数void readfile(),说明一个文件指针FILE *fp打开文 件“student.txt“。 模块三:学生信息的查找 声明void seek()为查找函数,通过switch(item)设定用学号查找,用姓名查找两个分支。 模块四:学生信息的修改 声明void modify()为学生信息修改函数,通过switch(item)设定 所要修改的项目。 模块五:刷新学生信息 声明void sort()将录入学生系按升序排列,用的是“冒泡排序法” 实现排序。 模块六:增加学生信息 声明void insert()插入学生信息,先通过判断学生是否存在,若 否则继续输入,若是则跳出,重新循环。 模块七:删除学生信息 声明void del()实现学生信息删除,通过学号对比确定要删除的信 息,然后用后一个替换掉。 模块八:显示学生信息 通过display()函数输出学生信息。 模块九:保存信息 通过fp=fopen(“student.txt“,“w“);写入信息。 模块十:汇总学生数目 通过number()函数将已有男女生及总学生数目汇总出来。 模块十一:系统帮助 通过help()函数帮助操作。 模块十二:界面菜单 通过switch(num)调用以上各函数,实现功能。 1、程序采用模块化设计,各模块独立,可分块调试,个模块由主函数控制调用。 2、其中主要模块(readfile()、seek()、modify())都是利用数组,指针来实现数据结构设计。 3、数据库设计的任务是确定系统所需要的数据库。数据库是表的集合,通常一个系统只需一个数据库。设计人 是根据需求分析,确定数据库所包含的表及字段、表间的关系,然后具体确定表的结构,包括字段名、字段类型及宽度,需要的索引等。根据对需求得到的数据结构进行分析,按数据输入输出的要求,确定表和表间的关系,进行验证、调整、修改、完善,使其能够实现用户对数据和功能的要求。通讯信息表包括以下字段:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail。学号为主索引。 四、结束语 我设计的程序总体功能大都能够运行顺利,但有许多地方比较复杂,需要进一步修改,进行简化。通过这次课程设计的锻炼,我收获很多,具体归纳为以下几点: 1、首先,也是最重要的一点,学会如何将一个复杂的问题简化,将一个较大的问题分成几个小问题,再一一解决这些小问题。在设计一个程序之前,要学会对程序功能进行规划,将其分为几个不同的功能模块,要思路清晰,简单易用; 2、学会灵活运用已有的知识,同时适当的拓展一些知识;比如,这次设计过程中,有一些函数以前就很少用到,甚至没有见过,但对程序的设计及用户界面的改善带来方便; 3、解决问题时,要尽可能考虑全面。每一个细节都很重要,既要避免功能的重复,也要避免功能疏漏的地方! 4、在这次课程设计过程中,参考了许多资料,发现C语言真的很有意思!比如我看到一个关于用C语言编写的小程序:五子棋、俄罗斯方块、推箱子等,等这次课程结束后,我就想利用C语言编写这些小游戏。曾经认为C是个挺枯燥的课程,现在发现这不仅仅是个简单的课程,而是个很实用的计算机工具! 五、程序源代码清单 #include #include #include #define BUFLEN #define LEN #define N struct record { char code[LEN+1]; char name[LEN+1]; int age; char sex[3]; char time[LEN+1]; char add[30]; char tel[LEN+1]; char mail[30]; }stu[N]; int k=1,n,m; void readfile(); void seek(); void modify(); void insert(); void del(); void display(); void save(); void number(); void menu(); int main() { while(k) menu(); system(“pause“); return 0; } void readfile()//刷新学生信息 { char *p=“student.txt“; FILE *fp; int i=0; if ((fp=fopen(“student.txt“,“r“))==NULL) { printf(“Open file %s error! Strike any key to exit!“,p); system(“pause“); exit(0); } while(fscanf(fp,“%s %s%d%s %s %s %s %s“,stu[i].code,stu[i].name,&stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8) { i++; i=i; } fclose(fp); n=i; printf(“录入完毕!\n“); } void seek()//查询学生信息 ......void modify()//修改学生信息 ......void sort()//对学生信息按学号排序 { int i,j,*p,*q,s; char temp[10]; for(i=0;i { for(j=n-1;j>i;j--) if(strcmp(stu[j-1].code,stu[j].code)>0) { strcpy(temp,stu[j-1].code); strcpy(stu[j-1].code,stu[j].code); strcpy(stu[j].code,temp); strcpy(temp,stu[j-1].name); strcpy(stu[j-1].name,stu[j].name); strcpy(stu[j].name,temp); strcpy(temp,stu[j-1].sex); strcpy(stu[j-1].sex,stu[j].sex); strcpy(stu[j].sex,temp); strcpy(temp,stu[j-1].time); strcpy(stu[j-1].time,stu[j].time); strcpy(stu[j].time,temp); strcpy(temp,stu[j-1].add); strcpy(stu[j-1].add,stu[j].add); strcpy(stu[j].add,temp); strcpy(temp,stu[j-1].tel); strcpy(stu[j-1].tel,stu[j].tel); strcpy(stu[j].tel,temp); strcpy(temp,stu[j-1].mail); strcpy(stu[j-1].mail,stu[j].mail); strcpy(stu[j].mail,temp); p=&stu[j-1].age; q=&stu[j].age; s=*q; *q=*p; *p=s; } } } void insert()//增加学生信息 ......void display()//显示当前学生信息 { int i; printf(“所有学生的信息为:\n“); printf(“学生学号,学生姓名,年龄,性别,出生年月,地址,电话,E-mail\n“); printf(“--------------------------------------------------------------------\n“); for(i=0;i { printf(“%6s,%7s,%5d,%5s,%9s,%8s,%10s,%14s\n“,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } } void save()//保存当前学生信息 { int i; FILE *fp; fp=fopen(“student.txt“,“w“); for(i=0;i { fprintf(fp,“%s,%s,%d,%s,%s,%s,%s,%s\n“,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } fclose(fp); } void number()//汇总学生数目 { int i,girl,boy=0; for(i=0;i if(strcmp(stu[i].sex,“1“)==0) {boy++;} girl=n-boy; printf(“男生人数是:%d\n女生的人数是:%d\n“,boy,girl); printf(“总的学生人数为:%d“,n); } void help()//系统帮助 { printf(“输入性别时男为1,女为2“); printf(“\n3.增加学生信息后,切记保存按7;\n“); printf(“\n4.谢谢您的使用!\n“); } void menu()//可视化的系统操作界面 { int num; printf(“ \n\n 学生通讯录管理系统 \n\n“); printf(“ *********************系统功能菜单************************ \n“); printf(“ -------------------------------- ------------------------------- \n“); printf(“ 1.刷新学生信息 2.查询学生信息 \n“); printf(“ ********************************************* \n“); printf(“ 3.修改学生信息 4.增加学生信息 \n“); printf(“ ********************************************* \n“); printf(“ 5.按学号删除信息 6.显示当前信息 \n“); printf(“ ********************************************* \n“); printf(“ 7.保存当前学生信息 8.汇总学生数目 \n“); printf(“ ********************************************* \n“); printf(“ 9.系统帮助 10.退出系统 \n“); printf(“ --------------------------------- ------------------------------ \n“); printf(“ ************************************************************ \n“); printf(“请选择菜单编号:“); scanf(“%d“,&num); switch(num) { case 1:readfile();break; case 2:seek();break; case 3:modify();break; case 4:insert();break; case 5:del();break; case 6:display();break; case 7:save();break; case 8:number();break; case 9:help();break; case 10:k=0;break; default:printf(“请在1-10之间选择\n“); } } #include struct message //定义结构体 { char name[15]; char number[15]; char phone[15]; char qq[13]; char addr[25]; struct message *next; //指向下一数据 }; int n; void creat() //建立电话簿 { int num;char choice[5]={'2'}; FILE *fp; struct message *head; struct message *p,*q; n = 0; p = 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; while(num!=0) { n = n+1; if(n==1)head = p; else q->next = p; q = p; p =(struct message *)malloc(LEN); //分配存储区 while(choice[0]!='1' && choice[0]!='0') //判断是否继续 { printf(“n1 继续输入n 0 返回n”); printf(“请选择操作:”); scanf(“%s”,choice); } switch(choice[0]) { case '1': { fp=fopen(“通讯录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); choice[0] = '2'; } continue; case '0': num = 0; system(“cls”); } } q->next = 0;} void add() //添加通讯录 { int num;char choice[5]={'2'}; FILE *fp; struct message *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”,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(choice[0]!='1' && choice[0]!='0') 否继续 { printf(“n1 继续输入n 0 返回n”); printf(“请选择操作:”); scanf(“%s”,choice); } //分配空间 //输入内容 //分配空间 //判断是 switch(choice[0]) { case '1': { fp=fopen(“通讯录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); choice[0] = '2'; } continue; case '0': num = 0; system(“cls”); } } q->next = 0;} void findname(struct message * fphead) { struct message *p; int a = 0; char findname[20]; 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,p->qq,p->addr); a = 1; } } if(a!= 1) printf(“无此通讯录!n”); } void findphone(struct message * fphead) //按电话查找 { struct message *p; int a = 0; char findphone[15]; system(“cls”); printf(“请输入要查找的电话:n”); scanf(“%s”,findphone); for(p=fphead->next;p!=NULL;p=p->next) { if(strcmp(p->phone,findphone)==0) { printf(“姓名 电话号码 学号 住址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 findnumber(struct message * fphead) //按学号查找 { struct message *p; int a = 0; char findnumber[15]; system(“cls”); QQ printf(“请键入要查找的学生学号:n”); scanf(“%s”,findnumber); for(p=fphead->next;p!=NULL;p=p->next) { if(strcmp(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 findname[15]; 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 %-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->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!= 1) printf(“无此通讯录!n”); } void del(struct message * fphead) //删除记录 { FILE *fp,*fq; struct message *p,*q,*r; char sname[15]; 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->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”); //用新文件覆盖原文件 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=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(“姓名 电话号码 学号 住址n”); p =(struct message *)malloc(LEN); //分配空间 while(!feof(fp)) { fread(p,LEN,1,fp); printf(“%-15s %-15s %-15s %-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 choice[5]; QQ while(begin == 1) { printf(“tt>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n”); printf(“tttt欢迎使用学生通讯录n”); printf(“tt<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< printf(“ttt*主窗口菜单*nn”); printf(“ttt1:显示通讯录中所有记录;nn”); printf(“ttt2:建立新通讯录;nn”); printf(“ttt3:添加新记录;nn”); printf(“ttt4:查询通讯录中的记录;nn”); printf(“ttt5:修改通讯录中的记录;nn”); printf(“ttt6:删除通讯录中的记录;nn”); printf(“ttt0:退出通讯录nn”); printf(“请选择操作:”); scanf(“%s”,choice); switch(choice[0]) { case '1': { print(); printf(“按任意键返回主菜单!n”); getch(); system(“cls”); } continue; case '2': { creat(); } continue; case '3': { add(); } 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”); 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”);}第二篇:学生通讯录管理系统
第三篇:C语言-通讯录管理系统
第四篇:C语言课程设计学生通讯录管理系统设计
第五篇:C语言大作业——学生通讯录管理系统