C语言课程设计通讯录
管理系统
文件编码(008-TTIG-UTITD-GKBTT-PUUTI-WYTUI-8256)
***科技大学
本科生课程设计说明书
题目:C语言课程设计
——通讯录管理系统
学生姓名:**
学号:***
专业:软件工程
班级:1
指导教师:**
内蒙古科技大学课程设计任务书
一、教学要求
1. 巩固和加深学生对C语言课程的基本知识的理解和掌握
2. 掌握C语言编程和程序调试的基本技能
3. 利用C语言进行基本的软件设计
4. 掌握书写程序设计说明文档的能力
5. 提高运用C语言解决实际问题的能力
二、设计资料及参数
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
通讯录管理系统
现有一批通讯录的数椐,要求输入计算机并存放在内存中,然后增加若干个新通讯录的记录,并可输出通讯录清单,实现文件存盘和读入文件进行修改的功能。通讯录的基本信息包括编号,姓名,电话号码,QQ号码,电子邮件,通讯地址。要求设计菜单来调用其各功能模块:
新建文件、打开文件、保存信息到文件
输入记录、输出记录
查询记录(至少具有两种查询方式,例如以姓名查询和以电话号码查
询)
修改、插入和删除记录
三、设计要求及成果
1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)
2. 写出详细设计说明(至少包括功能实现分析和模块流程图)
3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少3个函数,每人至少200行代码,不包括注释和花括号)
4. 设计完成的软件要便于操作和使用
5. 设计完成后提交课程设计报告(请严格按照模板进行排版)
四、进度安排
第一天? 选择课程设计题目,分析课题的要求
第二天? 编程
第三天? 编程及调试
第四天? 写课程设计报告
目录
第一章需求分析
1.1引言
通过程序设计,达到理论与实际应用相结合,提高对信息管理系统的分析能力,能够根据实际应用,初步实现系统功能模块及算法的设计,通过编程基本实现信息管理系统。
1.2任务概述
1.采用结构体的形式对数据进行输入输出。
2.可以对通讯录进行简单的排序,筛选,删除。
3.可以对任意信息就行修改。
4.可以把数据已文件的形式输入输出。
5.任意浏览信息。
1.3数据描述
以所示的文本数据位初始数据进行简单操作,也可另行添加。
1.4功能需求
实现以上功能需求。
1.5性能需求
1.能够进行简单的数据处理。
2.具有对新信息处理打印打能力。
1.6运行需求
1.输入个人信息时以例如按照“编号、姓名、年龄、电话号码、通讯地址、电子邮箱”的顺序输入。
2.输入时编号年龄、电话号码、通讯地址、电子邮箱以数字格式输入,输入姓名以文字输入。
3.以(Y/N)形式判断时,仅限N或者n为否,其他字符真。
4.进入排序功能后,要想见排序信息,到主菜单下见浏览信息功能。
1.7任务计划
1.样例输入和输出
2.本通讯录管理程序,可以对数据进行输入输出,集排序,修改,打印,删除等功能。
下面以上述数据描述的数据为测试数据进行简单输入输出。
——1.未排序前的信息
4).删除界面:
删除后,通讯录里的显示记录:
5).查询界面:
以姓名查询方式为例:
6).修改界面:
修改后,通讯录里的显示记录:
7).保存界面:
文件截图:
第二章概要设计
2.1总体设计
添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。
显示:可以以表格形式输出所有通讯录里的记录
删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容查询:可以选择用姓名、电话、地址三种方式查询
修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改
保存:,输入文件名(带后缀名)后,即可将通讯录信息保存到文件2.2数据类型设计(或数据结构设计)
typedef struct
{
char score; /*编号*/
char name[10]; /*姓名*/
char num[15]; /*号码*/
char email[20]; /*邮箱*/
char age[8]; /*年龄*/
char adds[20]; /*住址*/ }Person;
以结构体数组类型输入数据。
2.3接口设计
表:函数列表
2.4运行界面设计
void main() /*主函数*/ {
int n=0;
for(;;)
{
switch(menu_select())
{
case 1:
printf("\n\t添加记录到通讯录\n"); /*添加记录*/
n=Input(pe,n);
break;
case 2:
printf("\n\t\t\t 通讯录记录表\n"); /*显示记录*/
Display(pe,n);
break;
case 3:
printf("\n\t从通讯录中删除记录\n");
n=Delete_a_record(pe,n);
/*删除记录*/
printf("\t");
system("pause");
break;
case 4:
printf("\n\t在通讯录中查找记录\n"); Query_a_record(pe,n);
/*查找记录*/
printf("\t");
system("pause");
break;
case 5:
printf("\n\t修改通讯录中的记录\n"); Change(pe,n);
/*修改数据*/
printf("\t");
system("pause");
break;
case 6:
printf("\n\t保存功能\n"); WritetoText(pe,n);
/*保存数据*/
printf("\t");
system("pause");
break;
case 0:
printf("\n\t\t谢谢使用,再见!\n");
/*结束程序*/
printf("\n\t\t");
system("pause");
exit(0);
}
}
}
以switch为关键控制选着要调用函数的开关,然后以主菜单为主界
面,其他功能为扩展界面来运行通讯录管理系统。
主菜单代码为:
int menu_select()
{
char c;
do{
system("cls");
printf("\t\t *****通讯录***** \n");
printf("\t\t |----------------------------------
|\n");
printf("\t\t│ 1. 添加记录│\n");
printf("\t\t│ 2. 显示记录│\n");
printf("\t\t│ 3. 删除记录│\n");
printf("\t\t│ 4. 查询记录│\n");
printf("\t\t│ 5. 修改记录│\n");
printf("\t\t│ 6. 保存记录│\n");
printf("\t\t│ 0. 退出程序│\n");
printf("\t\t\|----------------------------------|n");
printf("\t\t请您选择(0-6):");
c=getchar();
}while(c<'0'||c>'6');
return(c-'0');
}
如图所示为主要运行界面:
第三章详细设计
3.1输入模块设计
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("\n\t是否继续添加?(Y/N)");
scanf("\t%c",&sign);
i++;
}
return(n+i);
}
3.2输出模块设计
void Display(Person per[],int n)
{
int i;
printf("--------------------------------------------------
--------------------\n"); /*格式*/
printf("编号姓名年龄电话号码通讯地址
电子邮箱\n");
printf("--------------------------------------------------
--------------------\n");
for(i=1;i printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",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"); } 3.3查找模块设计 void Query_a_record(Person per[],int n) { int m; printf("\t\n请选择查询方式:\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此人编号: %d\n",per[i].score); printf("\t此人年龄: %s\n",per[i].age); printf("\t电话号码: %s\n",per[i].num); printf("\t通讯地址: %s\n",per[i].adds); printf("\t电子邮箱: %s\n",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此人编号: %d\n",per[i].score); printf("\t此人姓名: %s\n",per[i].name); printf("\t此人年龄: %s\n",per[i].age); printf("\t通讯地址: %s\n",per[i].adds); printf("\t电子邮箱: %s\n",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此人编号: %d\n",per[i].score); printf("\t此人姓名: %s\n",per[i].name); printf("\t此人年龄: %s\n",per[i].age); printf("\t电话号码: %s\n",per[i].num); printf("\t电子邮箱: %s\n",per[i].email); } ; } 3.4删除模块设计 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("\t\t\t已经成功删除!\n"); return(n-1); }