C语言课程设计论文
题目:学生通讯录管理系统
班 级: 0524092班
组 号:第十小组
姓名(学号):朱会彬(052409257)吴江波(052409251)吴建鹏(052409250)
高阳阳(052409240)姚浩(052409253)
谢敬奇(052409252)
指导教师:张玉花
通讯录管理系统
【设计目的】
设计“通讯录管理系统”使其具有数据插入、修改、删除、显示和查询等功能。
数据包括:姓名,电话,地址,邮编及e-mail。
可对记录中的内容进行修改。
可增加或删除记录。
可显示所有保存的记录。
可以按姓名或电话进行查询。
【设计思路】
根据要求,编号数据以文本文件存放在文件中,故需要提供文件的输入、输出等操作;还需要保存记录以进行修改,删除,查找等操作;另外还应提供键盘式选择菜单实现功能选择。
【总体设计】
图1 系统功能模块图
【详细设计】
主函数
主函数设计要求简洁,只提供部分提示语和函数的调用
【程序】
图2. 主函数流程图
附录:源代码
#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:display();break;
case 4:add();break;
case 5:listbyname();break;
case 6:dele();break;
case 7:save();break;
case 8:exit(0);
}
}
}
menu_select()
{
char s[80];
int a;
printf("*_* press any key enter menu! *_*n");
getch();
system("cls");
printf("tt********************MENU*********************nn");
printf("tt0. 输入记录n");
printf("tt1. 显示记录 n");
printf("tt2. 按姓名查找n");
printf("tt3. 按电话号码查找n");
printf("tt4. 插入记录 n");
printf("tt5. 按姓名排序n");
printf("tt6. 删除记录n");
printf("tt7. 记录保存文件n");
printf("tt8. Quitn");
printf("tt***********************************************n");
do{
printf("nEnter you choice(0~11):");
scanf("%s",s);
a=atoi(s);
}
while(a<0||a>11);
returna;
}
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<num;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<num)
{
printf("ntt__________________________");
system("pause");
}
}
printf("ntt************************************************");
}
else
printf("ntt通讯录中无任何纪录");
printf("ntt按任意键返回主菜单:");
getch();
return(0);
}
search()
{
int mark=0;
int i;
int a=0;
printf("ntt***************** 按姓名查找*******************");
char name[20];
printf("ntt请输入姓名:");
scanf("%s",name);
for(i=a;i<num;i++)
{
if (strcmp(student[i].name,name)==0)
{
printf("ntt************* 以下是您查找的用户信息 ***********");
printf("ntt姓名: %s",student[i].name);
printf("ntt电话: %s",student[i].phone);
printf("ntt地址: %s",student[i].adress);
printf("ntte-mail:%s",student[i].e_mail);
printf("ntt************************************************");
mark++;
if((i+1)<num)
{
printf("ntt是否继续查找相同名字的用户信息:(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
else
return(0);
}
else
{
printf("ntt按任意键返回主菜单");
getch();
return(0);
}
}
}
if(mark!=0)
{
printf("ntt没有相同姓名的用户纪录");
printf("ntt按任意键返回主菜单");
getch();
return(0);
}
else
{
printf("ntt没有相同姓名的用户纪录");
printf("ntt按任意键返回主菜单");
getch();
return(0);
}
}
display()
{
int mark=0;
int i;
int a=0;
printf("ntt****************** 按电话查找 ******************");
char phone[10];
printf("ntt请输入电话号码:");
scanf("%s",phone);
for(i=0;i<num;i++)
{
if (strcmp(student[i].phone,phone)==0)
{
printf("ntt************** 以下是您查找的用户信息**********");
printf("ntt姓名: %s",student[i].name);
printf("ntt电话: %s",student[i].phone);
printf("ntt地址: %s",student[i].adress);
printf("ntte-mail:%s",student[i].e_mail);
printf("ntt************************************************");
printf("ntt按任意键返回主菜单:");
mark++;
getch();
return(0);
}
}
if (mark==0)
{
printf("ntt没有改用户的信息");
printf("ntt按任意键返回主菜单");
getch();
return(0);
}
return(0);
}
add()
{
int i;
if ((fp=fopen("student.bin","wb"))==NULL)
{
printf("ntt文件打开失败");
}
for (i=0;i<num;i++)
{
if(fwrite(&student[i],sizeof(structrecord),1,fp)!=1)
{
printf("ntt写入文件错误!n");
}
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);
}
fclose(fp);
printf("ntt通讯录文件已保存");
printf("ntt按任意键退出程序ntt");
exit(0);
return(0);
}
void deletebyphone()
{
int i,j;
int deletemark=0;
char phone[20];
printf("ntt请输入要删除用户电话号码:");
scanf("%s",phone);
if(num==0)
{
printf("ntt对不起,文件中无任何纪录");
printf("ntt按任意键返回主菜单");
getch();
return;
}
for (i=0;i<num;i++)
{
if (strcmp(student[i].phone,phone)==NULL)
{
printf("ntt以下是您要删除的用户纪录:");
printf("ntt姓名: %s",student[i].name);
printf("ntt电话: %s",student[i].phone);
printf("ntt地址: %s",student[i].adress);
printf("ntte-mail:%s",student[i].e_mail);
printf("ntt是否删除?(y/n)");
if (getch()=='y')
{
for(j=i;j<num-1;j++)
student[j]=student[j+1];
num--;
deletemark++;
printf("ntt删除成功");
printf("ntt是否继续删除?(y/n)");
if (getch()=='y')
deletebyphone();
return;
}
else
return;
}
continue;
}
if (deletemark==0)
{
printf("ntt没有该用户的纪录");
printf("ntt是否继续删除?(y/n)");
if (getch()=='y')
deletebyphone();
return;
}
}
void deletebyname()
{
int a=0;
int findmark=0;
int j;
int deletemark=0;
int i;
char name[20];
printf("ntt请输入要删除用户姓名:");
scanf("%s",name);
for (i=a;i<num;i++)
{
if (strcmp(student[i].name,name)==NULL)
{
printf("ntt以下是您要删除的用户纪录:");
findmark++;
printf("ntt________________________________");
printf("ntt姓名: %s",student[i].name);
printf("ntt电话: %s",student[i].phone);
printf("ntt地址: %s",student[i].adress);
printf("ntte-mail:%s",student[i].e_mail);
printf("ntt________________________________");
printf("ntt是否删除?(y/n)");
if (getch()=='y')
{
for(j=i;j<num-1;j++)
student[j]=student[j+1];
num--;
deletemark++;
printf("ntt删除成功");
if((i+1)<num)
{
printf("ntt是否继续删除相同姓名的用户信息?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
printf("ntt是否继续删除?(y/n)");
if (getch()=='y')
deletebyname();
return;
}
if((i+1)<num)
{
printf("ntt是否继续删除相同姓名的用户信息?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
}
else
continue;
}
if((deletemark==0)&&(findmark==0))
{
printf("ntt没有该用户的纪录");
printf("ntt是否继续删除?(y/n)");
if (getch()=='y')
deletebyphone();
return;
return;
}
else if (findmark!=0)
{
printf("ntt没有重名信息");
printf("ntt没有该用户的纪录");
printf("ntt是否继续删除?(y/n)");
if (getch()=='y')
deletebyphone();
return;
return;
}
}
dele()
{
char choic;
printf("ntt1-按电话号码删除 2-按姓名删除");
printf("ntt请选择:");
choic=getch();
switch (choic)
{
case '1':deletebyphone();break;
case '2':deletebyname();break;
}
return(0);
}
listbyname()
{
int i,j;
struct record tmp;
for (i=1;i<num;i++)
{
if(strcmp(student[i].name,student[i-1].name)<0)
{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j--;
}while((strcmp(tmp.name,student[j].name)<0&&j>=0));
student[j+1]=tmp;
}
}
printf("ntt排序成功,是否显示?(y/n)");
if (getch()=='y')
list();
return(0);
}
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<num;j++)
{
fwrite(student,sizeof(student),1,fp);
}
}
printf("保存成功!");
fclose(fp);
return(0);
}
【设计体会】
通过为期一周的课程设计,我们对《C语言》这门课程有了更深一步的了解。它是计算机程序设计的重要理论技术基础,在我们信息与计算科学专业的学习中占据着十分重要的地位。同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。
运用《C语言》中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),进一步熟悉指针的用法,数组的建立运用和函数的调用等。
【参考文献】
参考书:
《C程序设计》(第3版),谭浩强,清华大学出版社,2005.7
《C程序设计题解与上机指导》(第3版),谭浩强,清华大学出版社,2005.7
《C语言大学实用 教程》,苏小红、陈惠鹏、孙志岗等编,电子工业出版社,2007.2
《C语言大学实用 教程习题与实验指导》,苏小红等编,电子工业出版社,2007.8
《C语言程序设计案例教程》,卢双凤等编,北京科海电子出版社 ,2002.9