资源描述
程序设计报告书
( / 年 第 一 学期)
题 目:通讯录管理系统
专 业
学 生 姓 名
班 级 学 号
指 导 教 师
指 导 单 位
日 期
评 分 细 则
评分项
先进
良好
中档
差
遵守机房规章制度
上机时体现
学习态度
程序准备状况
程序设计能力
团队合伙精神
课题功能实现状况
算法设计合理性
顾客界面设计
报告书写认真限度
内容详实限度
文字表达纯熟限度
回答问题精确度
简 短 评 语
教师签名:
年 月 日
评分级别
备注
评分级别有五种:先进、良好、中档、及格、不及格
通讯录管理系统
一、 课题内容和规定
该课题规定设计一种简朴、实用通信录管理程序,重要功能涉及通信录数据录入、查找、修改、删除、排序、显示等。所有通信录数据都要运用文献系统保存,以备系统下次运营时使用。通过此课题,全面熟悉、掌握C语言基本知识,掌握C程序设计中顺序、分支、循环三种构造及数组、函数和C语言基本图形编程等办法,把编程和实际结合起来,纯熟掌握文献、数组、指针各种操作,以及某些基本算法思想应用。增强对不同问题运用和灵活选取适当数据构造以及算法描述本领,熟悉编制和调试程序技巧,掌握分析成果若干有效办法,进一步提高上机动手能力,培养使用计算机解决实际问题能力,养成提供文档资料习惯和规范编程思想,为后来在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较夯实基本。
二、 需求分析
系统功能模块图:
流程图
查询
修改
删除
排序
显示
添加
保存
读入
退出
添加:可以添加通讯录记录,依次输入序号,姓名,简拼,性别,工作单位,地址,电话,手机,电子邮件,备注后,会提示与否继续添加。
查询:可以选取用序号、姓名、简拼、电话方式查询
修改:先查找,再修改。若查找出多条记录,则进一步提示顾客选取记录序号,再修改
删除:输入欲删除那个人名字后,删除她(她)记录内容
排序:可按姓名、简拼等排序。规定排序后,记录序号也要重新编排
显示:可以以表格形式输出所有通讯录里记录
保存:,输入文献名(带后缀名)后,即可将通讯录信息保存到文献
读入:从文献中读入通信录数据。
界面功能规定:
(1)采用和谐字符界面,实现一种功能控制菜单。
(2)每次操作都从该菜单选取,运用循环构造使得一次运营程序可进行多次操作。
三、概要设计
(1)重要构造体:
typedef struct
{
char score; /*序号*/
char name[10]; /*姓名*/
char jianpin[50]; /*简拼*/
char sex[3]; /*性别*/
char company[20]; /*工作单位*/
char adds[20]; /*地址*/
char tel[15]; /*电话*/
char num[15]; /*手机*/
char email[20]; /*电子邮件*/
char remark[30]; /*备注*/
}Person;
(2).工作流程图:
1.添加:添加通讯录记录
N
开始
i=0
sign!='n'&&sign!='N
输入
Return(n+i)
结束
Y
2.查询:查询通讯录记录
先选取查询方式,以姓名查询方式为例
N
开始
输入简拼
通讯录与否有此简拼
通讯录无此人
显示信息
结束
Y
输入电话
输入姓名
N
通讯录与否有此电话
通讯录与否有此姓名
通讯录无此人
通讯录无此人
显示信息
显示信息
结束
结束
Y
Y
N
3.修改:修改通讯录记录
开始
输入姓名
通讯录与否有此姓名
通讯录无此人
修改信息
结束
Y
N
4.删除:删除通讯录记录
开始
输入姓名
通讯录与否有此姓名
通讯录无此人
删除信息
结束
Y
N
5.显示:显示通讯录记录
开始
int i,i=1
i<n+1
输出一种记录
i++
结束
Y
N
四、源程序代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
typedef struct
{
char score; /*序号*/
char name[10]; /*姓名*/
char jianpin[50]; /*简拼*/
char sex[3]; /*性别*/
char company[20]; /*工作单位*/
char adds[20]; /*地址*/
char tel[15]; /*电话*/
char num[15]; /*手机*/
char email[20]; /*电子邮件*/
char remark[30]; /*备注*/
}Person;
Person pe[80];
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│ 7. 保存记录 │\n");
printf("\t\t│ 8. 文献读入 │\n");
printf("\t\t│ 0. 退出程序 │\n");
printf("\t\t└───────┘\n");
printf("\t\t请您选取(0-8):");
c=getchar();
}while(c<'0'||c>'8');
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].jianpin);
printf("\t性别:");
scanf("\t%s",per[n+i].sex);
printf("\t工作单位:");
scanf("\t%s",per[n+i].company);
printf("\t地址:");
scanf("\t%s",per[n+i].adds);
printf("\t电话:");
scanf("\t%s",per[n+i].tel);
printf("\t手机:");
scanf("\t%s",per[n+i].num);
printf("\t电子邮件:");
scanf("\t%s",per[n+i].email);
printf("\t备注:");
scanf("\t%s",per[n+i].remark);
gets(x);
printf("\n\t与否继续添加?(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<n+1;i++)
{
printf("%-3d%-10s%-10s%-5s%-10s%-10s%-13s%-13s%-10s%-10s\n",per[i-1].score,per[i-1].name,per[i-1].jianpin,per[i-1].sex,per[i-1].company,per[i-1].adds,per[i-1].tel,per[i-1].num,per[i-1].email,per[i-1].remark);
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<n) i++;
if(i==n)
{
printf("\t通讯录中没有此人!\n");
return(n);
}
for(j=i;j<n-1;j++)
{
strcpy(per[j].name,per[j+1].name);
strcpy(per[j].jianpin,per[j+1].jianpin);
strcpy(per[j].sex,per[j+1].sex);
strcpy(per[j].company,per[j+1].company);
strcpy(per[j].adds,per[j+1].adds);
strcpy(per[j].num,per[j+1].num);
strcpy(per[j].tel,per[j+1].tel);
strcpy(per[j].email,per[j+1].email);
strcpy(per[j].remark,per[j+1].remark);
per[j].score=per[j+1].score;
}
printf("\t\t\t删除成功\n");
return(n-1);
}
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<n) i++;
if(i==n)
{
printf("\t通讯录中没有此人!\n");
return;
}
printf("\t序号:%d\n",per[i].score);
printf("\t简拼:%s\n",per[i].jianpin);
printf("\t性别:%s\n",per[i].sex);
printf("\t工作单位:%s\n",per[i].company);
printf("\t通讯地址:%s\n",per[i].adds);
printf("\t电话号码:%s\n",per[i].num);
printf("\t电子邮箱:%s\n",per[i].email);
printf("\t备注:%s\n",per[i].remark);
} ;
if(m==2)
{
char s[20];
int i=0;
printf("\t请输入想查询简拼:");
scanf("\t%s",s);
while(strcmp(per[i].jianpin,s)!=0&&i<n) 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].sex);
printf("\t工作单位:%s\n",per[i].company);
printf("\t通讯地址:%s\n",per[i].adds);
printf("\t电话号码:%s\n",per[i].num);
printf("\t电子邮箱:%s\n",per[i].email);
printf("\t备注:%s\n",per[i].remark);
} ;
if(m==3)
{
char s[20];
int i=0;
printf("\t请输入想查询电话:");
scanf("\t%s",s);
while(strcmp(per[i].num,s)!=0&&i<n) 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].jianpin);
printf("\t性别:%s\n",per[i].sex);
printf("\t工作单位:%s\n",per[i].company);
printf("\t通讯地址:%s\n",per[i].adds);
printf("\t电子邮箱:%s\n",per[i].email);
printf("\t备注:%s\n",per[i].remark);
} ;
}
void SelectSort(Person per[],int n)
{
int i,j,flag;
Person temp;/*暂时变量做互换数据用*/
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)
{
for(i=0;i<n;i++)
{
flag=0; /*设标志判断与否发生过互换*/
for(j=0;j<n-1;j++)
if((strcmp(per[j].name,per[j+1].name))>0) /*比较大小*/
{
flag=1;
strcpy(temp.name,per[j].name); /*互换记录*/
strcpy(temp. abbreviation,per[j].jianoin);
strcpy(temp.sex,per[j].sex);
strcpy(pany,per[j].company);
strcpy(temp.adds,per[j].adds);
strcpy(temp.tel,per[j].tel);
strcpy(temp.num,per[j].num);
strcpy(temp.email,per[j].email);
strcpy(temp.remarks,per[j].remark);
strcpy(per[j].name,per[j+1].name);
strcpy(per[j]. abbreviation,per[j+1]. jianpin);
strcpy(per[j].sex,per[j+1].sex);
strcpy(per[j].company,per[j+1].company);
strcpy(per[j].adds,per[j+1].adds);
strcpy(per[j].tel,per[j+1].tel);
strcpy(per[j].num,per[j+1].num);
strcpy(per[j].email,per[j+1].email);
strcpy(per[j].remarks,per[j+1].remark);
strcpy(per[j+1].name,temp.name);
strcpy(per[j+1]. abbreviation,temp. jianpin);
strcpy(per[j+1].sex,temp.sex);
strcpy(per[j+1].company,pany);
strcpy(per[j+1].adds,temp.adds);
strcpy(per[j+1].tel,temp.tel);
strcpy(per[j+1].num,temp.num);
strcpy(per[j+1].email,temp.email);
strcpy(per[j+1].remarks,temp.remark);
}
if(flag==0)break; /*如果标志为0,阐明没有发生过互换循环结束*/
}
}
if(m==2)
{
for(i=0;i<n;i++)
{
flag=0; /*设标志判断与否发生过互换*/
for(j=0;j<n-1;j++)
if((strcmp(per[j]. jianpin,per[j+1]. jianpin))>0) /*比较大小*/
{
flag=1;
strcpy(temp.name,per[j].name); /*互换记录*/
strcpy(temp. jianpin,per[j]. jianpin);
strcpy(temp.sex,per[j].sex);
strcpy(pany,per[j].company);
strcpy(temp.adds,per[j].adds);
strcpy(temp.tel,per[j].tel);
strcpy(temp.num,per[j].num);
strcpy(temp.email,per[j].email);
strcpy(temp.remarks,per[j].remark);
strcpy(per[j].name,per[j+1].name);
strcpy(per[j]. abbreviation,per[j+1].jianpin);
strcpy(per[j].sex,per[j+1].sex);
strcpy(per[j].company,per[j+1].company);
strcpy(per[j].adds,per[j+1].adds);
strcpy(per[j].tel,per[j+1].tel);
strcpy(per[j].num,per[j+1].num);
strcpy(per[j].email,per[j+1].email);
strcpy(per[j].remarks,per[j+1].remark);
strcpy(per[j+1].name,temp.name);
strcpy(per[j+1]. abbreviation,temp. jianpin);
strcpy(per[j+1].sex,temp.sex);
strcpy(per[j+1].company,pany);
strcpy(per[j+1].adds,temp.adds);
strcpy(per[j+1].tel,temp.tel);
strcpy(per[j+1].num,temp.num);
strcpy(per[j+1].email,temp.email);
strcpy(per[j+1].remarks,temp.remark);
}
if(flag==0)break; /*如果标志为0,阐明没有发生过互换循环结束*/
}
}
if(m==3)
{
for(i=0;i<n;i++)
{
flag=0; /*设标志判断与否发生过互换*/
for(j=0;j<n-1;j++)
if((strcmp(per[j].tel,per[j+1].tel))>0) /*比较大小*/
{
flag=1;
strcpy(temp.name,per[j].name); /*互换记录*/
strcpy(temp. abbreviation,per[j]. jianpin);
strcpy(temp.sex,per[j].sex);
strcpy(pany,per[j].company);
strcpy(temp.adds,per[j].adds);
strcpy(temp.tel,per[j].tel);
strcpy(temp.num,per[j].num);
strcpy(temp.email,per[j].email);
strcpy(temp.remarks,per[j].remark);
strcpy(per[j].name,per[j+1].name);
strcpy(per[j]. abbreviation,per[j+1]. jianpin);
strcpy(per[j].sex,per[j+1].sex);
strcpy(per[j].company,per[j+1].company);
strcpy(per[j].adds,per[j+1].adds);
strcpy(per[j].tel,per[j+1].tel);
strcpy(per[j].num,per[j+1].num);
strcpy(per[j].email,per[j+1].email);
strcpy(per[j].remarks,per[j+1].remark);
strcpy(per[j+1].name,temp.name);
strcpy(per[j+1]. abbreviation,temp. jianpin);
strcpy(per[j+1].sex,temp.sex);
strcpy(per[j+1].company,pany);
strcpy(per[j+1].adds,temp.adds);
strcpy(per[j+1].tel,temp.tel);
strcpy(per[j+1].num,temp.num);
strcpy(per[j+1].email,temp.email);
strcpy(per[j+1].remarks,temp.remark);
}
if(flag==0)break; /*如果标志为0,阐明没有发生过互换循环结束*/
}
}
printf("排序成功\n"); /*显示排序成功*/
}
void Change(Person per[],int n)
{
char s[20];
int i=0;
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);
}
int count = 0;
if(m==1)
{
int i=0;
printf("\t请输入想修改记录中姓名:");
scanf("%s",s);
printf("---------------------------------------------------------------------------------\n"); /*格式*/
printf("序号 姓名 简拼 性别 工作单位 地址 电话 手机 电子邮件 备注\n");
printf("---------------------------------------------------------------------------------\n");
for (int t = 0;t < n;t++) {
if (strcmp(per[t].name,s)==0) {
count ++;
printf("%-6d%-6s%-6s%-6s%-10s%-10s%-8s%-8s%-12s%-10s%\n",per[t].score,per[t].name,per[t].jianpin,per[t].sex,per[t].company,per[t].adds,per[t].tel,per[t].num,per[t].email,per[t].remark);
}
}
printf("---------------------------------------------------------------------------------\n");
if (count > 1)
{
printf("查到多条数据,请输入序号:");
m = 5;
}
else
{
while(strcmp(per[i].name,s)!=0&&i<n) 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]. jianpin);
printf("\t性别:");
scanf("\t%s",per[i].sex);
printf("\t工作单位:");
scanf("\t%s",per[i].company);
printf("\t地址:");
scanf("\t%s",per[i].adds);
printf("\t电话:");
scanf("\t%s",per[i].tel);
printf("\t手机:");
scanf("\t%s",per[i].num);
printf("\t电子邮件:");
scanf("\t%s",per[i].email);
printf("\t备注:");
scanf("\t%s",per[i].remark);
printf("\t修改成功!");
}
}
if(m==2)
{
int i=0;
printf("\t请输入想修改记录中姓名:");
scanf("%s",s);
展开阅读全文