C语言课程设计论文
通讯录管理系统
【设计目的】
设计“通讯录管理系统”使其具有数据插入、修改、删除、显示和查询等功能。
(1) 数据包括:人名、工作单位、电话号码和E-mail地址。
(2) 可对记录中的姓名和电话号码进行修改。
(3) 可增加或删除记录。
(4) 可显示所有保存的记录。
(5) 可按人名或电话号码进行查询。
【设计思路】
根据要求,电话簿数据以文本文件存放在文件中,故需要提供文件的输入、输出等操作;还需要保存记录以进行修改,删除,查找等操作;另外还应提供键盘式选择菜单实现功能选择。
【总体设计】
图1 系统功能模块图
【详细设计】
1. 主函数
主函数设计要求简洁,只提供部分提示语和函数的调用
【程序】
图2. 主函数流程图
Void menu() /*主界面*/
{
int n, w1;
void enter(); void add(); void modify(); void browse(); void deleter(); void search();
do
{
puts("\t******************************菜单*****************************\t\n\n");
puts("\t\t\t\t1.新建联系人");
puts("\t\t\t\t2.添加联系人");
puts("\t\t\t\t3.修改");
puts("\t\t\t\t4.删除");
puts("\t\t\t\t5.浏览");
puts("\t\t\t\t6.查找");
puts("\t\t\t\t7.退出");
puts("\n\n\t***************************通讯录******************************\t\n");
printf("请选择服务种类(1-7) : [ ]\b\b");
scanf("%d",&n);
if(n<1||n>7)
{w1=1;getchar();}
else w1=0;
}while(w1==1);
switch(n)
{
case 1: enter(); break; /*输入模块*/
case 2: add(); break; /*添加模块*/
附录:源代码
#define N 50
#include<stdio.h>
#include<string.h>
struct people
{char name[20]; char company[50]; char num[15]; char mail[20];}peop[N];
void printf_face()
{ printf("\n\t姓名\t单位\t电话号码\t邮箱\n"); }
void printf_one(int i)
{ printf("\t%s\t%s\t%s\t%s\n",peop[i].name,peop[i].company,peop[i].num,peop[i].mail); }
void printf_n(int n)
{ int j;
for(j=0;j<n;j++)
{ if((j!=0)&&(j%10==0)) {printf("\n\nPress any key to continue...:"); getchar(); puts("\n\n");}
printf_one(j);
} getchar();
}
int load()
{ FILE *fp;
int i;
if((fp=fopen("file","rb"))==NULL)
{ printf("\nCan not open file\n");
exit(0);
}
for(i=0;!feof(fp);i++)
fread(&peop[i],sizeof(struct people),1,fp);
fclose(fp);
return(i-1);
}
int modify_data(int i,int n)
{ int c,w1; void input(int i); void menu();
do
{ puts("\n修改选项=>\n\n 1).姓名 2).单位 3).电话号码 4).邮箱 5).所有数据 6).取消并返回");
printf("请选择?: [ ]\b\b");
scanf("%d",&c);
if(c>6||c<1) {puts("\nChoose error! Please again!"); getchar();}
}while(c>6||c<1);
do
{ switch(c)
{ case 1: printf("name:"); scanf("%s",peop[i].name); break;
case 2: printf("company:"); scanf("%s",peop[i].company); break;
case 3: printf("number:"); scanf("%s",peop[i].num); break;
case 4: printf("e-mail:"); scanf("%s",peop[i].mail); break;
case 5: input(i); break;
case 6: menu();
}
puts("\nNow:\n");
printf_face(); printf_one(i);
printf("\n确定?\n\n\t1).是 2).不,重新修改 3).返回不保存 [ ]\b\b");
scanf("%d",&w1);
}while(w1==2);
return(w1);
}
void input(int i)
{ printf_face(); printf("\t");
scanf("%s\t%s\t%s\t%s",peop[i].name,peop[i].company,peop[i].num,peop[i].mail); }
void save(int n)
{ FILE *fp; int i;
if((fp=fopen("file","wb"))==NULL)
{ printf("\nCan not open file\n");
exit(0);
}
for(i=0;i<n;i++)
if(peop[i].name[0]!='\0')
if(fwrite(&peop[i],sizeof(struct people),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
void printf_back()
{
int w; void browse(); void menu();
printf("\n\n\t^_^.Successful. ^_^\n\n");
printf("What do you want to do?\n\n\t1).浏览所有\t2).返回: [ ]\b\b");
scanf("%d",&w);
if(w==1) browse();
else menu();
}
void main()
{
void menu();
menu();
}
void menu()
{
int n, w1;
void enter(); void add(); void modify(); void browse(); void deleter(); void search();
do
{
puts("\t************************菜单************************ ");
puts("\t\t*******************1.新建联系人*******************");
puts("\t\t*******************2.添加联系人*******************");
puts("\t\t*******************3.修 改*******************");
puts("\t\t*******************4.删 除*******************");
puts("\t\t*******************5.浏 览*******************");
puts("\t\t*******************6.查 找*******************");
puts("\t\t*******************7.退 出*******************");
puts("\n\n\t********************通讯录********************* ");
printf("请选择服务种类(1-7) : [ ]\b\b");
scanf("%d",&n);
if(n<1||n>7)
{w1=1;getchar();}
else w1=0;
}while(w1==1);
switch(n)
{
case 1: enter(); break;
case 2: add(); break;
case 3: modify(); break;
case 4: deleter(); break;
case 5: browse(); break;
case 6: search(); break;
case 7: exit(0);
}
}
void enter()
{ int i,n;
printf("How many people(0-%d)?:",N-1);
scanf("%d",&n);
printf("请输入数据:\n");
for(i=0;i<n;i++)
{printf("\n输入第 %d个记录.\n",i+1);
input(i);
}
if(i!=0) save(n);
printf_back();
}
void add()
{ int i,n,k,t;
n=load();
printf("How many people do you want to add(0-%d)?:",N-n-1);
scanf("%d",&t); k=n+t;
for(i=n;i<k;i++)
{ printf("\n输入第 %d个记录.\n",i-n+1); input(i);}
save(k); printf_back();
}
void modify()
{ struct people s; int i,n,k,w0=1,w1,w2=0;
n=load();
do
{ k=-1; printf_face(); printf_n(n);
do
{ printf("\n\nEnter name that you want to modify!\nName:");
scanf("%s",s.name);
for(i=0;i<n;i++)
if(strcmp(s.name,peop[i].name)==0) {k=i; s=peop[i];}
if(k==-1) printf("\n\n没有记录请重新输入!");
}while(k==-1);
printf_face(); printf_one(k);
w1=modify_data(k,n);
if(w1==1) {printf("\n\t^_^.Successful ^_^.\n\n是否继续?\n\n\t1).是 2).保存返回\t[ ]\b\b");
scanf("%d",&w0); w2=1;}
else
{w0=0; if(w2==0) peop[k]=s;}
if((w0!=1)&&(w2==1)) save(n);
}while(w0==1); menu();
}
void browse()
{ int n;
n=load();
printf_face(); printf_n(n);
printf("\t共有 %d 记录.\n",n);
printf("\nPress any key to back...");
getchar();
menu();
}
void search()
{ int w0,k,i,n,w1,w2; struct people s; n=load();
do
{printf("请选择查找类别: 1).姓名 2).电话号码 [ ]\b\b");
scanf("%d",&w1); if(w1<1||w1>2) {printf("输入错误!请重新输入!\n"); w2=1;}
}while(w2==1);
if(w1==1)
{do
{ k=-1;
do
{ printf("\n\nEnter name that tou want to search!\nName:");
scanf("%s",s.name);
for(i=0;i<n;i++)
if(strcmp(s.name,peop[i].name)==0) {k=i; s=peop[i];}
if(k==-1) printf("\n\n没有记录请重新输入!");
}while(k==-1);
printf_face(); printf_one(k);
printf("\nWhat do you want to do?\n\t1).继续 2).返回菜单 [ ]\b\b");
scanf("%d",&w0);
}while(w0==1);
menu();
}
else
{ do
{ k=-1;
do
{ printf("\n\nEnter number that tou want to search!\nNum:");
scanf("%s",s.num);
for(i=0;i<n;i++)
if(strcmp(s.num,peop[i].num)==0) {k=i; s=peop[i];}
if(k==-1) printf("\n\n没有记录请重新输入!");
}while(k==-1);
printf_face(); printf_one(k);
printf("\nWhat do you want to do?\n\t1).继续 2).返回菜单 [ ]\b\b");
scanf("%d",&w0);
}while(w0==1);
menu();
}
}
void deleter()
{struct people s; int i,n,k,w0,w1;
n=load();
do
{ k=-1; printf_face(); printf_n(n);
do
{ printf("\n\nEnter name that you want to delete!\nName:");
scanf("%s",s.name);
for(i=0;i<n;i++)
if(strcmp(s.name,peop[i].name)==0) {k=i; s=peop[i];}
if(k==-1) printf("\n\n没有记录请重新输入!");
}while(k==-1);
printf_face(); printf_one(k);
printf("\n确定?\n\t1).是 2).返回 [ ]\b\b");
scanf("%d",&w0);
if(w0==1) {peop[k].name[0]='\0'; save(n);} else break;
printf("\n\t^_^.Successful^_^.\n");
printf("What do you want to do?\n\t1).继续 2).返回 [ ]\b\b");
scanf("%d",&w1);
}while(w1==1);
menu();
}
【设计体会】
通过为期一周的课程设计,我们对《C语言》这门课程有了更深一步的了解。它是计算机程序设计的重要理论技术基础,在我们信息与计算科学专业的学习中占据着十分重要的地位。同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。
运用《C语言》中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),进一步熟悉指针的用法,数组的建立运用和函数的调用等。
【参考文献】
朱若愚.数据结构[M]. 北京: 电子工业出版社, 2006.1:41-65
晋良颍.数据结构[M]. 北京:人民邮电出版社, 2007.05: 21-45
刘大有.数据结构[M]. 北京: 高等教育出版社, 2006.3: 30-58
赵文静. 数据结构与算法[M]. 北京: 科学出版社, 2007.8: 41-64
徐孝凯.数据结构简明教程.[M]. 北京: 清华大学出版社, 2006.04: 102-115
严蔚敏,吴伟民.数据结构(C语言版)[M]. 北京:清华大学出版社, 2007.4: 39-43
傅清祥,王晓东. 数据结构与算法设计[M]. 北京: 电子工业出版社, 2006.3: 31-46
王敬华,林萍,.陈静. C语言程序设计[M]. 北京: 清华大学出版社, 2007.10: 22-39
李云清,杨庆红,揭安全.数据结构(C语言版)[M]. 北京:人民邮电出版社,2006.1: 44-67
[10]李春葆. 数据结构(C语言版)习题与解析[M].北京:清华大学出版社, 2006.1: 47-55
C语言程序设计实习报告手机通讯录管理系统一、设计题目的任务和内容任务:本程序是非数值计算型算法设计,我设计出了通讯录管理系统的基本…
源代码includeltiostreamgtincludeltstringgtincludeltiomanipgtincludel…
山东工商学院信电学院高级语言程序设计课程设计报告高级语言程序设计课程设计报告题目手机通讯录管理系统专业电子信息工程班级电子112学…
设计课题题目一课程设计目的与要求1课程设计目的1综合运用之前所学知识选择控制循环控制数组函数指针结构体和文件等来完成一个简单的信息…
目录摘要2第一章绪论311课程设计目的和内容概述312题目手机通讯录管理系统3第二章程序分析421总体设计422详细设计423总流…
源代码includeltiostreamgtincludeltstringgtincludeltiomanipgtincludel…
目录摘要2第一章绪论311课程设计目的和内容概述312题目手机通讯录管理系统3第二章程序分析421总体设计422详细设计423总流…
C语言课程设计C语言课程设计报告设计题目学生姓名学生学号专业班级学院名称同组人姓名指导老师20xx年个人消费系统姚兰06月20日个…
C程序课程设计报告手机通讯录管理系统姓名谢骏学院珠宝学院学号20xx1002649班级141082一课程设计目的和内容概述1目的加…
详细通讯录课程设计报告1总体设计与算法分析1.1课程需求分析学生通过课程设计加深理解课堂教学内容,要求学生在设计中逐步提高程序设计…
设计说明书通讯录系统起止日期20xx年01月03日至20xx年01月08日学班学成生姓名级号绩XXX指导教师签字计算机与通信学院2…