第一篇:湖南工业大学 通讯录管理系统课程设计报告书(C语言)
湖南工业大学
二〇〇九 ~ 二〇一〇学年 第 二 学期
计算机与通信学院
课程设计报告书
课程名称: C语言课程设计 班 级: 学 号:
姓 名:
指导老师:
二〇〇九 年 九 月
通讯录管理系统一. 需求分析
设计题目及要求:
◆ 建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;
◆ 能够提供添加、删除和修改通讯录信息的功能;
◆ 能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询; ◆ 将通讯录保存在文件中;
◆ 能够按表格方式输出通讯录信息。
系统功能需求分析: 主要包含一下多种功能:
添加:添加通讯录记录 显示:显示通讯录记录 删除:删除通讯录记录 查询:查询通讯录记录 修改:修改通讯录记录 保存:将信息保存到文件
二. 概要设计
系统功能模块图:
添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。
显示:可以以表格形式输出所有通讯录里的记录
删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容 查询:可以选择用姓名、电话、地址三种方式查询
修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改
保存:,输入文件名(带后缀名)后,即可将通讯录信息保存到文件
三. 详细设计
(1).通讯录:
void main()
/*主函数*/ {
int n=0;
for(;;)
{
switch(menu_select())typedef struct
{
char score;
/*编号*/ char name[10];
/*姓名*/
char num[15];
/*号码*/
char email[20];
/*邮箱*/ char age[8];
/*年龄*/ char adds[20];
/*住址*/ }Person;
{
case 1:
printf(“nt添加记录到通讯录n”);
/*添加记录*/ n=Input(pe,n);break;
case 2:
printf(“nttt
通讯录记录表n”);
/*显示记录*/ Display(pe,n);break;
case 3:
printf(“nt从通讯录中删除记录n”);n=Delete_a_record(pe,n);
printf(“t”);
system(“pause”);break;
case 4:
printf(“nt在通讯录中查找记录n”);Query_a_record(pe,n);
printf(“t”);
system(“pause”);break;
case 5:
printf(“nt修改通讯录中的记录n”);Change(pe,n);
printf(“t”);
system(“pause”);break;
case 6:
printf(“nt保存功能n”);WritetoText(pe,n);
printf(“t”);
system(“pause”);break;
case 0:
printf(“ntt谢谢使用,再见!n”);
printf(“ntt”);system(“pause”);exit(0);
/*删除记录*/
/*查找记录*/
/*修改数据*/
/*保存数据*/
/*结束程序*/
} } }
(2).工作流程图:
①添加:添加通讯录记录
②显示:显示通讯录记录
③删除:删除通讯录记录
④查询:查询通讯录记录
先选择查询方式,以姓名查询方式为例
四. 源程序代码
#include
typedef struct
{
char score;
/*编号*/
char name[10];
/*姓名*/
char num[15];
/*号码*/
char email[20];
/*邮箱*/
char age[8];
/*年龄*/
char adds[20];
/*住址*/ }Person;Person pe[80];
int menu_select()
{
char c;
do{
system(“cls”);
printf(“tt *****通讯录***** n”);
printf(“tt┌───────┐n”);
printf(“tt│ 1.添加记录
│n”);
printf(“tt│ 2.显示记录
│n”);
printf(“tt│ 3.删除记录
│n”);
printf(“tt│ 4.查询记录
│n”);
printf(“tt│ 5.修改记录
│n”);
printf(“tt│ 6.保存记录
│n”);
printf(“tt│ 0.退出程序
│n”);
printf(“tt└───────┘n”);
printf(“tt请您选择(0-6):”);
c=getchar();
}while(c<'0'||c>'6');
return(c-'0');
}
int Input(Person per[],int n){ int i=0;
char sign,x[10];
while(sign!='n'&&sign!='N')
{
printf(“t编号:”);
scanf(“t%d”,&per[n+i].score);
printf(“t姓名:”);
scanf(“t%s”,per[n+i].name);
printf(“t年龄:”);
scanf(“t%s”,per[n+i].age);
printf(“t电话号码:”);
scanf(“t%s”,per[n+i].num);
printf(“t通讯住址:”);
scanf(“t%s”,per[n+i].adds);
printf(“t电子邮箱:”);
scanf(“t%s”,per[n+i].email);
gets(x);
printf(“nt是否继续添加?(Y/N)”);
scanf(“t%c”,&sign);
i++;
}
return(n+i);}
void Display(Person per[],int n)
{
int i;
printf(“--------n”);
/*格式*/
printf(“编号
姓名
年龄
电话号码
通讯地址
电子邮箱n”);
printf(“--------n”);
for(i=1;i { printf(“%-5d%-8s%-6s%-13s%-15s%-15sn”,per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email); if(i>1&&i%10==0) { printf(“t----n”); printf(“t”); system(“pause”); printf(“t----n”); } } printf(“--------n”);system(“pause”);} int Delete_a_record(Person per[],int n){ char s[20]; int i=0,j; printf(“t请输入想删除记录中的名字:”); scanf(“%s”,s); while(strcmp(per[i].name,s)!=0&&i if(i==n) { printf(“t通讯录中没有此人!n”); return(n); } for(j=i;j strcpy(per[j].num,per[j+1].num); strcpy(per[j].name,per[j+1].name); strcpy(per[j].age,per[j+1].age); strcpy(per[j].adds,per[j+1].adds); strcpy(per[j].email,per[j+1].email); per[j].score=per[j+1].score; } printf(“ttt已经成功删除!n”); return(n-1);} void Query_a_record(Person per[],int n){ int m;printf(“tn请选择查询方式:n”); printf(“t┌──────┐n”); printf(“t│1------姓名 │n”); printf(“t│2------电话 │n”); printf(“t│3------地址 │n”); printf(“t│4------返回 │n”); printf(“t└──────┘n”); printf(“请选择:”); scanf(“%d”,&m); while(m!=1&&m!=2&&m!=3&&m!=4) { printf(“输入错误,请重新选择:”); scanf(“%d”,&m);} if(m==1){ char s[20]; int i=0; printf(“t请输入想查询的姓名:”); scanf(“t%s”,s); while(strcmp(per[i].name,s)!=0&&i if(i==n) { printf(“t通讯录中没有此人!n”); return; } printf(“t此人编号: %dn”,per[i].score); };printf(“t此人年龄: %sn”,per[i].age);printf(“t电话号码: %sn”,per[i].num);printf(“t通讯地址: %sn”,per[i].adds);printf(“t电子邮箱: %sn”,per[i].email);if(m==2){ char s[20]; int i=0; printf(“t请输入想查询的电话:”); scanf(“t%s”,s); while(strcmp(per[i].num,s)!=0&&i if(i==n) { printf(“t通讯录中没有此人!n”); return; };} printf(“t此人编号: %dn”,per[i].score);printf(“t此人姓名: %sn”,per[i].name);printf(“t此人年龄: %sn”,per[i].age);printf(“t通讯地址: %sn”,per[i].adds);printf(“t电子邮箱: %sn”,per[i].email);if(m==3){ char s[20]; int i=0; printf(“t请输入想查询的地址:”); scanf(“t%s”,s); while(strcmp(per[i].adds,s)!=0&&i if(i==n) { printf(“t通讯录中没有此人!n”); return; } printf(“t此人编号: %dn”,per[i].score);printf(“t此人姓名: %sn”,per[i].name);printf(“t此人年龄: %sn”,per[i].age); printf(“t电话号码: %sn”,per[i].num); printf(“t电子邮箱: %sn”,per[i].email);};} void Change(Person per[],int n){ char s[20]; int i=0; printf(“t请输入想修改的记录中的名字:”); scanf(“%s”,s); while(strcmp(per[i].name,s)!=0&&i if(i==n) { printf(“t通讯录中没有此人!n”); return; } printf(“t编号:”); scanf(“t%d”,&per[i].score); printf(“t姓名:”); scanf(“t%s”,per[i].name); printf(“t年龄:”); scanf(“t%s”,per[i].age);printf(“t电话号码:”); scanf(“t%s”,per[i].num); printf(“t通讯住址:”); scanf(“t%s”,per[i].adds);printf(“t电子邮箱:”);scanf(“t%s”,per[i].email);printf(“t修改成功!”);} void WritetoText(Person per[],int n) { int i=0; FILE *fp; char filename[20]; printf(“t保存到文件n”); printf(“t请输入所保存的文件名:”); scanf(“t%s”,filename); if((fp=fopen(filename,“w”))==NULL) { printf(“t无法打开文件n”); system(“pause”); return; /*定义文件指针*/ /*定义文件名*/ /*输入文件名*/ } fprintf(fp,“******************************************通讯录******************************************n”);fprintf(fp,“编号 姓名 年龄 电话号码 通讯地址 电子邮箱n”);fprintf(fp,“----------------------------n”);while(i { fprintf(fp,“%-3dt%-6st%-3st%-13st%-20st%-20sn”,per[i].score,per[i].name,per[i].age,per[i].num,per[i].adds,per[i].email); i++; } fprintf(fp,“----------------------------n”);fprintf(fp,“***************************************共有%d条记录****************************************n”,n); fclose(fp); /*关闭文件*/ printf(“保存成功!n”);} void main() /*主函数*/ { int n=0; for(;;) { switch(menu_select()) { case 1: printf(“nt添加记录到通讯录n”); /*添加记录*/ n=Input(pe,n); break; case 2: printf(“nttt 通讯录记录表n”); /*显示记录*/ Display(pe,n); break; case 3: printf(“nt从通讯录中删除记录n”); n=Delete_a_record(pe,n); /*删除记录*/ printf(“t”); system(“pause”); break; case 4: printf(“nt在通讯录中查找记录n”); Query_a_record(pe,n); printf(“t”); system(“pause”); break; case 5: printf(“nt修改通讯录中的记录n”); Change(pe,n); printf(“t”); system(“pause”); break; case 6: printf(“nt保存功能n”); WritetoText(pe,n); printf(“t”); system(“pause”); break; case 0: printf(“ntt谢谢使用,再见!n”); printf(“ntt”); system(“pause”); exit(0); } } } 五. 测试数据及其结果分析 测试: 1).显示的主菜单界面 /*查找记录*/ /*修改数据*/ /*保存数据*/ /*结束程序*/ 2).添加界面: 3).显示界面: 4).删除界面: 删除后,通讯录里的显示记录: 5).查询界面: 以姓名查询方式为例: 6).修改界面: 修改后,通讯录里的显示记录: 7).保存界面: tongxunlu.txt文件截图: 问题思考: 1.当我在进行删除、查询、修改、保存等功能时,以查询为例,输入名字按回车后,虽然会显示该人的所有记录,但是显示后,它马上自动消失了,还没来得及等我看内容。因此,向别人请教后,在一些地方加入了system(“pause”);这个语言,用来对某项操作完成后进行暂停。 2.现在这个程序的界面个人感觉很清爽。但在最初,每次进行一项操作,运行窗口里的内容会一直保留着,感觉很杂乱,如下图(添加后,进行显示操作): 之后,我去网上寻求解决办法,知道可以使用system(“cls”);这一语句可以解决这个问题,最后,修改成功。 六. 课程设计总结 这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。自己动手,自己发现和解决问题。发现了自己的许多不足。平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。我相信在以后的学习能够解决好它们。但是,收获还是不小的,我不仅对C的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。 当我选择通讯录这个题目时,一开始想运用大量链表及指针来完成,但是在慢慢琢磨之后,觉得这个不一定要用链表,于是改变了编程思路。当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。另外一点要说的就是这个程序用了很多的循环,因此对于循环的控制要十分小心,有时while和do-while的区别也是十分重要的。 还有一点体会就是,书上和老师教的内容是有限的,我们需要不断地靠自己去学习,向他人请教,了解和掌握更多的知识,这样我们才能编出更好的C程序。 总体来说,这次C语言程序设计实验还是比较成功的,虽然最终程序还存在一些不足,但能取得这样的成绩我还是比较高兴的。 最后,要感谢学校为我们提供这次实验机会,也要感谢老师的教导和好心人对我的帮助与支持。 课程设计报告 课程设计题目: 通讯录管理 学生姓名: 专 业: 班 级: 指导教师: 2009年6月16日 实验题目: 《通讯录管理》 实验时间、地点: 2009-6-8到2009-6-12日 信工楼307 实验目的: 本次课程设计的主要目的是综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体和文件等相关内容的综合应用,使同学们能进一步熟悉掌握C语言的基本语法,进一步提升自己的编程能力并逐步培养编程思维,进而不断提高同学们解决问题的能力,并为以后的语言学习打下良好的基础。 实验要求: 1.独立完成; 2.此次课程设计在规定的时间必须在实验室完成,不得以任何理由在其他地点进行; 3.每个人需按照选题规则确定好自己的题目(注意不是多人完成一题,每人独立完成一题),不得以任何理由选择其他的题目,当然在完成自己的题目之后根据个人兴趣可以继续选做其他的题目; 4.课程设计完成后严格按照报告格式撰写课程设计报告,并于结束后的第三天上交到学习委员统一交给老师; 5.课程设计的成绩由两部分组成:程序检查成绩(40%,每个功能占程序分的20%)+报告检查成绩(40%)+平时考核(20%) 6.每个程序实现方式可以自选,可以采用文件、链表、数组或其任意组合完成。 实现思路: 通讯录信息包括:学号,姓名,班级,联系电话,E-MAIL,宿舍等 主要功能: (1)建立、修改和增删学生通讯录(2)能够按多种方式进行查询 按姓名查询、按学号查询 按宿舍查询 (3)要求:以菜单方式操作,界面友好,易于操作 流程图: 增加 1↓ ↓ 保存 查询 ↓ a↓ b↓ c↓ 按姓名查询 按学号查询 按宿舍查询 2→删除 4→保存 5↓ 5↓ 退出 退出 实现过程: 3#include printf(“ 学生通讯录 08041238”);printf(“n----------------------------n”);printf(“ 1.Add”);printf(“ 2.Delete”);printf(“ 3.Search”);printf(“ 4.Save”);printf(“ 5.Exit”);printf(“n----------------------------n”);} void Data_Menu1(){ printf(“n”);printf(“ a.Name”);printf(“nb.Xuehao”);printf(“nc.sushe”);} void Data_Load(){ int j;long k;fp=fopen(“members.txt”,“rt”);if(fp!=NULL){ for(i=1;i<50;i++){ j=fgetc(fp);if(j==EOF){ return;} k=i-1;fseek(fp,k*sizeof(struct member),SEEK_SET);fread(&members[i],sizeof(struct member),1,fp);} }else{ fp=fopen(“members.txt”,“a”);i=1;} } void Data_Add(int j){ printf(“n”);members[j].number=j;printf(“ntNo:%d”,j);printf(“ntName:”);scanf(“%s”,members[j].name);printf(“tTelephone:”);scanf(“%s”,members[j].telephone);printf(“tXuehao:”);scanf(“%s”,members[j].xuehao);printf(“tSushe:”);scanf(“%s”,members[j].sushe);printf(“tEmail:”);scanf(“%s”,members[j].email);} void Data_Show(int j){ printf(“ntNo:%d”,members[j].number);printf(“ntName:%s”,members[j].name);printf(“ntTelephone:%s”,members[j].telephone);printf(“ntXuehao:%s”,members[j].xuehao);printf(“ntSushe:%s”,members[j].sushe);printf(“ntEmail:%s”,members[j].email);} void Data_Save(){ int j;fp=fopen(“members.txt”,“a”);for(j=1;j<=i;j++){ fwrite(&members[j],sizeof(struct member),1,fp);} } main(){ char *search_name;char *search_xuehao;char *search_sushe;int j,k;Data_Load();i--;do{ Data_Menu();printf(“ Please Choose:”);ch=getche();switch(ch){ case '1': while(i<50){ i++;Data_Add(i);break;} if(i==50){ printf(“ntMessage is Filled!n”);} break;case '2': if(i<1){ printf(“ntNo Recordsn”);break;} printf(“ntDelete No:”);scanf(“%d”,&k);for(j=k;j break;case '4': Data_Save();printf(“ Date is Saved!n”);fclose(fp);break;case '5': printf(“nt”);printf(“ Do You Want To Save Message(y/n)”);if(getche()=='y'){ Data_Save();} fclose(fp);exit(0);break;default: break;} }while(1);} 实验总结: 经过几天的努力,终于做出来了,在这过程中自己逐渐提高了对数组、函数、指针、结构体和文件等相关内容的综合应用,并且进一步熟悉掌握C语言的基本语法,提升了自己的编程能力,并逐步培养编程思维,进而不断提高自己解决问题的能力。 心得体会: 实验虽然做成功了,但在此次试验过程中,自己也体会到一些东西: 第一:要细心对待程序的每一个环节,否则得话将会给自己编程带来很大的困扰.第二:要多动手去操作,只有这样才能真正使自己的能力得到真正的提高。 第三:课外要多看以些书,光凭课本上的知识是不够的,要自己自觉地去学习新的知识。 #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语言课程设计报告——刘显安 C语言课程设计 姓名:刘显安 学号:09041131 班级:090411 专业:计算机科学与技术 学院:信息工程学院 设计题目:学生通讯录管理系统 指导教师:宋文琳 提交时间:2010年9月4日 第1页(共25页) C语言课程设计报告——刘显安 课程题目:学生通讯录管理系统 要求:学生通讯录信息包括:学号、姓名、班机、联系电话、E-mail、宿舍等 主要功能:1、2、3、4、5、通讯录信息录入功能 通讯录信息删除功能 通讯录信息浏览功能 通讯录信息查询功能 按学号排序功能 一、总体设计 首先,整个系统必须有一个主函数,为了尽量提高程序的易修改性,且不至于相互干扰,将每一个功能分成不同的模块,用不同的函数来实现,例如在我写的这个程序中,一共用了11个函数,分别是: 主菜单函数menu()、关于函数gaunyu()、帮助函数help()、输出单个学生信息函数shuchu()、输入函数shuru()、输出所有学生信息函数findall()、按姓名查找函数findname()、按学号查找函数findnum()、删除函数shanchu()、排序函数paixu()、主函数main(),这样在整个程序的设计过程中也就一目了然,写起来也相对轻松了不少。 这个程序我只是总体上参考了一下网上程序的架构,具体的各个函数是参照课本上《链表》那一章的内容的,比如结构体的建立、查找和排序等功能,这些书上都有类似的,其中排序功能虽没有原版的,第2页(共25页) C语言课程设计报告——刘显安 但是在第六章中有一个用冒泡法排序的例题,我就是仿照这个模式来对结构体进行排序的,总之整个程序中蕴含了我很多的汗水。 二、具体设计 关于这个程序的具体设计,也不是一两句话就能说完的,所以我也不想再在这里赘述了,因为程序里都可以看的到,几乎每个函数都倾注了我的大量汗水,我在这上面花了不少的时间,不过从中也收获了很多,因为不停地修改不停的调试,总之还是直接看源程序吧,因为也没必要在这里重复地说废话。 三、源代码 以下是整个程序的源代码,其中我的主菜单函数是很美观的,但由于这里字体和板式的限制,不能很好的显现,可以看我下面程序运行的截图就知道了。—————————————————— #include struct student{ 第3页(共25页) C语言课程设计报告——刘显安 long num;char name[20];int banji;char tel[11];char Email[20];int sushe;struct student *next;}; struct student *stu;int n; void menu(void){ /*主菜单函数*/ system(“cls”);puts(“****************************************************************************”);puts(“** ^_^学生通讯录管理系统^_^ **”);puts(“****************************************************************************”);puts(“******** 计 ********”); 第4页(共25页) C语言课程设计报告——刘显安 puts(“******* *******”);puts(“****** 算 ******”);puts(“***** 0 1=录入学生通讯录信息 *****”);puts(“**** 9 机 ****”);puts(“*** ***”);puts(“** 科 **”);puts(“* *”);puts(“** 1 学 **”);puts(“*** ***”);puts(“**** 与 ****”);puts(“***** *****”);0 4 刘 2= 显 安 6= 第5页(共25页) 列出所有学生通讯录 3=按姓名查询信息 4=按学号查询信息 5=删除学生信息 按学号将通讯录排序 7=关于 8=帮助 0=退出 C语言课程设计报告——刘显安 puts(“****** 技 ******”);puts(“******* *******”);puts(“******** 术 ********”);puts(“****************************************************************************”);} void guanyu()/*关于函数*/ { system(“cls”);puts(“n ************************** ”);puts(“ *** 版权所有,翻版必究!***”);puts(“**** copyright◎刘显安!****”);puts(“ *** 2009~2010 ***”);puts(“ **************************”);puts(“n返回主菜单请按【9】”);if(getche()=='9')menu();} struct student *shuru(void)/*输入函数*/ 第6页(共25页) C语言课程设计报告——刘显安 { system(“cls”);struct student *s1,*s2;n=1;int num;puts(“请输入学生个数(提示:个数不能输入0!):”);scanf(“%d”,&num);s1=s2=(struct student *)malloc(sizeof(struct student));puts(“*************************************************”);puts(“请输入学号:”);scanf(“%ld”,&s1->num);puts(“请输入学生姓名:”);scanf(“%s”,s1->name);puts(“请输入班级:”);scanf(“%d”,&s1->banji);puts(“请输入电话号码:”);scanf(“%s”,s1->tel);puts(“请输入电子邮件:”);scanf(“%s”,s1->Email);puts(“请输入学生宿舍号:”);scanf(“%d”,&s1->sushe);stu=s1; 第7页(共25页) C语言课程设计报告——刘显安 while(n 第8页(共25页) C语言课程设计报告——刘显安 s2=s1;s2->next=NULL;return(stu);//system(“cls”);} void shuchu(struct student *s){ /*输出单个学生信息*/ printf(“* %-8ld”,s->num);printf(“%-15s”,s->name);printf(“%-8d”,s->banji);printf(“%-15s”,s->tel);printf(“%-15s”,s->Email);printf(“%-5d *n”,s->sushe);} void findall()/*输出所有学生信息*/ { system(“cls”);struct student *s;//if(n=2)//printf(“n现在有%d个学生信息,分别是:n”,n);//else 第9页(共25页) C语言课程设计报告——刘显安 printf(“n现在有%d个学生信息,分别是:n”,n);puts(“________________________________________________________________________”);puts(“* 学号 姓名 班级 电话 电子邮件 宿舍 *”);s=stu;while(s!=NULL){ shuchu(s);s=s->next;} puts(“________________________________________________________________________”);puts(“返回主菜单请按【9】”);if(getche()=='9')menu();} void findname(){ /*按姓名查找函数*/ system(“cls”);struct student *s;char name[20];printf(“n请输入你要查询的学生姓名:n”); 第10页(共25页) C语言课程设计报告——刘显安 scanf(“%s”,name);s=stu;while(strcmp(s->name,name)!=0){ s=s->next;} if(s==NULL){ puts(“查无此学生姓名!”);goto end;} else { puts(“该学生的信息为:”);puts(“* 学号 姓名 电子邮件 宿舍 *”);shuchu(s);} end:;puts(“返回主菜单请按【9】”);if(getche()=='9')menu();} 第11页(共25页) 班级 电话 C语言课程设计报告——刘显安 void findnum()/*按学号查找函数*/ { system(“cls”);struct student *s;puts(“请输入你要查询的学生学号:”);long i;scanf(“%ld”,&i);s=stu; while(s->num!=i){ s=s->next;} if(s==NULL){puts(“查无此学生学号!”);goto end;} else { puts(“该学生的信息为:”);puts(“* 学号 姓名 班级 邮件 宿舍 *”);shuchu(s); 第12页(共25页) 子电话 电C语言课程设计报告——刘显安 } end:;puts(“返回主菜单请按【9】”);if(getche()=='9')menu();} struct student *shanchu(struct student*stu)/*删除函数*/ { system(“cls”);long num;char s;struct student *s1,*s2;if(stu==NULL){ puts(“傻冒!没有任何学生信息,还删个屁啊,删删删!”);goto end;} puts(“请输入你要删除的学生学号:”);scanf(“%ld”,&num);s1=stu;puts(“警告:你确定要删除这个学生的信息吗(Y/N)?”);scanf(“%s”,&s); 第13页(共25页) C语言课程设计报告——刘显安 if((s=='Y')||(s=='y')){ while((num!=s1->num)&&(s1->next!=NULL)){s2=s1;s1=s1->next;} if(num==s1->num){ puts(“该学生的信息为:”);puts(“* 学号 姓名 班级 电话 电子邮件 宿舍 *”);shuchu(s1);if(s1==stu)stu=s1->next;else s2->next=s1->next;puts(“注意哟,该学生的信息已经删除了!剩下的学生通讯录信息如下:”);n=n-1;} } findall();return(stu);end:; 第14页(共25页) C语言课程设计报告——刘显安 puts(“返回主菜单请按【9】”);if(getche()=='9')menu();} void paixu(){ /*排序函数*/ struct student *p, *p1,*p2;int i,j;int temp;char b[20];if(stu==NULL){printf(“n学生信息不存在n”);goto end;} for(i=0;i {temp=p1->num;p1->num=p2->num;p2->num=temp; strcpy(b,p1->name);strcpy(p1->name,p2->name);strcpy(p2->nam 第15页(共25页) C语言课程设计报告——刘显安 e,b); temp=p1->banji;p1->banji=p2->banji;p2->banji=temp; strcpy(b,p1->tel);strcpy(p1->tel,p2->tel);strcpy(p2->tel,b); strcpy(b,p1->Email);strcpy(p1->Email,p2->Email);strcpy(p2->Email,b);temp=p1->sushe;p1->sushe=p2->sushe;p2->sushe=temp; } p1=p1->next;} } p=stu;puts(“已按学生学号顺序排序完毕!重新排序如下:”); puts(“****************************************************************************”);puts(“* 学号 姓名 班级 电话 电子邮件 宿舍 *”); while(p!=NULL) 第16页(共25页) C语言课程设计报告——刘显安 { printf(“* %-8ld”,p->num);printf(“%-15s”,p->name);printf(“%-8d”,p->banji);printf(“%-15s”,p->tel);printf(“%-15s”,p->Email);printf(“%-5d *n”,p->sushe);p=p->next;} end:;puts(“返回主菜单请按【9】”);if(getche()=='9')menu();} void help()/*帮助函数*/ { system(“cls”);puts(“n1、请按提示操作,第一次进入本系统时请按“1”录入学生信息,”);puts(“ 否则有可能造成程序运行错误!”);puts(“ 2、添加、修改功能本系统暂不提供,还有待以后完善,谢谢 第17页(共25页) C语言课程设计报告——刘显安 合作!”);puts(“ 3、请注意查看“Num Lock”是否打开,如果没有打开,则按数字n 键可能导致程序错误!”);puts(“ 4、版权所有,翻版必究!请按“7”键查看关于。”);puts(“n返回主菜单请按【9】”);if(getche()=='9')menu();} void main()/*主函数*/ { char a;menu();puts(“n您为首次使用本系统,强烈建议您按1开始录入学生信息,”);puts(“否则有可能导致程序运行错误!您可以按8查看帮助.”);a=getche();while(a){ puts(“");switch(a){case'0':goto end;break;case '1': puts(”n好了,您可以开始向本系统录入学生通讯录信息了: 第18页(共25页) C语言课程设计报告——刘显安 “);stu=shuru();system(”cls“);menu();puts(”n学生信息录入完毕,请输入你的选择(0~6):n“); break;case '2':findall();puts(”n请输入你的选择(0~6):“);break;case '3':findname();puts(”n请输入你的选择(0~6):“);break;case '4':findnum();puts(”n请输入你的选择(0~6):“);break;case '5':stu=shanchu(stu);puts(”n请输入你的选择(0~6):“);break;case '6':paixu();puts(”n请输入你的选择(0~6):“);break;case '7':guanyu();puts(”n请输入你的选择(0~6):“);break;case '8':help();puts(”n请输入你的选择(0~6):“);break;default:puts(”输错了!笨蛋!快点按数字1键录入学生信息吧!“);break;} a=getche();} end:;puts(”谢谢您使用本系统,欢迎再次使用!"); 第19页(共25页) C语言课程设计报告——刘显安 } ————————————————————————— 四、调试 主要是通过截图来显示运行过程 以下是程序运行的主界面: 按1后,开始录入信息,程序会提示你输入学生个数(例如本例中输入4个),当输完4个学生的信息时,程序会提示你已输入完毕: 第20页(共25页) C语言课程设计报告——刘显安 学生信息录入完毕,提示输入(0到6)进行选择: 第21页(共25页) C语言课程设计报告——刘显安 这时我选择按2输出所有学生信息,按9返回: 按3按姓名查询信息: 按4按学号查询信息: 第22页(共25页) C语言课程设计报告——刘显安 按5删除学生信息,这是按学号删除学生信息,本例中,删除学号为41212的学生信息: 删除成功后,系统自动将剩下的学生信息列出: 按6按学号从小到大进行排序,可以发现,排序成功: 第23页(共25页) C语言课程设计报告——刘显安 按8查看帮助函数: 呵呵,这是我设置的关于函数,满足一下敝人的虚荣心嘛^_^,版权所有,翻版必究哦! 最后按0退出系统: 第24页(共25页) C语言课程设计报告——刘显安 呵呵,怎么样?我写的程序还行吧。嘿嘿…… 三、总结 这个程序我只是总体上参考了一下网上程序的架构,具体的各个函数是参照课本上《链表》那一章的内容的,比如结构体的建立、查找和排序等功能,这些书上都有类似的,其中排序功能虽没有原版的,但是在第六章中有一个用冒泡法排序的例题,我就是仿照这个模式来对结构体进行排序的,总之整个程序中蕴含了我很多的汗水。 第25页(共25页) 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“); } }第二篇:C语言课程设计-通讯录管理
第三篇:C语言-通讯录管理系统
第四篇:学生通讯录管理系统(C语言课程设计实验报告)
第五篇:C语言课程设计学生通讯录管理系统设计