系统流程图
学生通讯录管理系统
系统设计书
提交人:
1. 系统结构
《学生通讯录管理系统》是一个管理学生通讯资料的小型信息管理系统,能对结构化的通讯记录进行方便的管理,包括增添,查询,修改, 删除等。
系统结构图如下:
2. 系统流程图
2.1 增加
实现此功能的代码如下: int zj(int e)/*增加记录*/ {
char num1,num2,c; int n,m,x,y; do {
e++;
if(e==99)/*检查记录是否满了*/ {
printf("无法再记录"); break; }
printf("请输入姓名:"); gets( as[e].name);
n=strlen(as[e].name);/*检查接受姓名的长度是否合适*/ while (n10) {
printf("你输入的姓名有点问题哦!认真啦!(╰_╯)#\n"); printf("请输入姓名:"); gets( as[e].name); n=strlen(as[e].name); } m=0;
do/*检查接受的出生日期是否合适*/ {
m++; if (m>1)
printf("你输入的生产日期有点问题哦!认真啦!(╰_╯)#\n"); printf("请输入格式为xxxx.xx.xx 的出生日期:"); gets(as[e].cs); } while
(as[e].cs[4]!='.'||as[e].cs[7]!='.'||(as[e].cs[0]-48)*1000+(as[e].cs[1]-48)*100+(as[e].cs[2]-48)*10+as[e].cs[3]-48>2014||(as[e].cs[0]-48)*1000+(as[e].cs[1]-48)*100+(as[e].cs[2]-48)*10+as[e].cs[3]-4812||(as[e].cs[5]-48)*10+as[e].cs[6]-4831||(as[e].cs[8]-48)*10+as[e].cs[9]-48
x=atoi(as[e].age);/*检查接受的年龄是否合适*/
while (x150) {
printf("你输入的年龄有点问题哦!认真啦!(╰_╯)#\n"); printf("请输入年龄:"); gets(as[e].age); x=atoi(as[e].age); }
printf("请输入电话号码:"); gets(as[e].phone);
y=strlen(as[e].phone);/*检查接受的电话号码是否合适*/ while (y>11||y
printf("你输入的电话号码有点问题哦!【你的号码可能没加区号】(╰_╯)#\n"); printf("请输入电话号码:"); gets(as[e].phone); y=strlen(as[e].phone); }
printf("请输入地址:"); gets(as[e].address); do {
printf("要保存的话按:【y 】,不想的话按:【n 】\n"); printf("请选择:");
scanf("%c%c",&num1,&c);} while(num1!='y'&&num1!='n'); if(num1=='n') e--;
printf("已记录:%d\n",e); do{
printf("想再输入的话按:y,不想按:n\n"); printf("请选择:");
scanf("%c%c",&num2,&c);} while(num2!='y'&&num2!='n'); if(num2=='n') break;
}while(e
return(e); }
2.2 修改
实现此功能的代码如下:
int xg(int e)/*修改记录*/ {
char num1,num2,c;
int i,j,k,g,h,f,a,z,n,m,x,y; char ad[20]; int count[5];
do {
j=0; k=1;
printf("请输入要修改人的【名字】或【生日】或【年龄】或【电话】(注意要完整哦)\n请输入:"); gets(ad);
for(i=0;i
g=strcmp(ad,as[i].name);/*将输入的信息与已有记录作比较*/ h=strcmp(ad,as[i].cs); z=strcmp(ad,as[i].age); f=strcmp(ad,as[i].phone); if(g==0||h==0||f==0||z==0) {
count[j]=i;/*将有相同信息的记录的数组下标记到一个数组里*/ j++;
printf("\n【编号】:%d",j); printf("\n姓名:"); puts(as[i].name); printf("\n生日:"); puts(as[i].cs); printf("\n电话:"); puts(as[i].phone); printf("\n地址:"); puts(as[i].address); k=0; } } if(k)
printf("【查无此人】\n");
if(g==0||h==0||f==0||z==0)/*用编号在count 数组中找到as 数组中要修改人的下标,然后修改该记录*/ { do {
printf("请输入你想修改的人的编号:"); scanf("%d%c",&a,&c); }
while(aj); do
{
printf("确认要改的话按:【y 】,不想的话按:【n 】\n"); scanf("%c%c",&num1,&c); }
while(num1!='y'&&num1!='n'); if(num1=='y') {
printf("请重新输入姓名:"); i=count[a-1];
gets( as[i].name); n=strlen(as[i].name); while (n4) {
printf("你输入的姓名有点问题哦!认真啦!(╰_╯)#\n"); printf("请输入姓名:"); gets( as[i].name); n=strlen(as[i].name); } m=0; do {
m++; if (m>1)
printf("你输入的出生日期有点问题哦!认真啦!(╰_╯)#\n"); printf("请输入格式为xxxx.xx.xx 的出生日期:"); gets(as[i].cs); }
while
(as[i].cs[4]!='.'||as[i].cs[7]!='.'||as[i].cs[0]'2'||as[i].cs[1]'9'||as[i].cs[2]'9'||as[i].cs[3]'9'||as[i].cs[5]'1'||as[i].cs[6]'9'||as[i].cs[8]'3'||as[i].cs[9]'9');
printf("请输入年龄:"); gets(as[i].age); x=atoi(as[i].age); while (x150) {
printf("你输入的年龄有点问题哦!认真啦!(╰_╯)#\n"); printf("请输入年龄:"); gets(as[i].age); x=atoi(as[i].age); }
printf("请输入电话号码:");
gets(as[i].phone); y=strlen(as[i].phone); while (y>11||y
printf("你输入的电话号码有点问题哦!【你的号码可能没加区号】(╰_╯)#\n"); printf("请输入电话号码:"); gets(as[i].phone); y=strlen(as[i].phone); }
printf("请输入地址:"); gets(as[e].address);
} } do {
printf("想再输入的话按:【y 】, 不想按:【n 】\n请选择:"); scanf("%c%c",&num2,&c);} while(num2!='y'&&num2!='n'); }
while(num2!='n'); return 0; }
2.3 查询
实现此功能的代码如下:
int ck(int e)/*查看记录*/ {
char num2,c;
int i,j,g,h,f,k,z; char ad[20]; int count[100];
do {
j=0; k=1;
printf("请输入查询人的【名字】或【生日】或【年龄】或【电话】(注意要完整哦)\n请选择:");
gets(ad);
for(i=0;i
g=strcmp(ad,as[i].name);/*将输入的信息与已有记录作比较*/ h=strcmp(ad,as[i].cs); f=strcmp(ad,as[i].phone); if(g==0||h==0||f==0||z==0) {
count[j]=i;/*将有相同信息的记录的数组下标记到一个数组里*/ j++;
printf("\n【第%d个人】",j); printf("\n姓名:"); puts(as[i].name); printf("\n生日:"); puts(as[i].cs); printf("\n电话:"); puts(as[i].phone); printf("\n地址:"); puts(as[i].address); k=0; }
} if(k)
printf("【查无此人】\n"); do{
printf("想再输入的话按【y 】, 不想按【n 】\n"); scanf("%c%c",&num2,&c);} while(num2!='y'&&num2!='n'); }
while(num2!='n'); return 0; }
2.4删除
实现此功能的代码如下: int sc(int e)/*删除*/ {
char num1,num2,c; int i,g,k,j,a,h,f,z; char ad[20]; char sb[1]="\0"; int count[5];
do {
j=0; k=1;
printf("请输入要删的人的【名字】或【生日】或【年龄】或【电话】!\n请输入:"); gets(ad);
for(i=0;i
g=strcmp(ad,as[i].name); h=strcmp(ad,as[i].cs); z=strcmp(ad,as[i].age); f=strcmp(ad,as[i].phone); if(g==0||h==0||f==0||z==0) {
count[j]=i; j++;
printf("\n【编号】:%d",j); printf("\n姓名:"); puts(as[i].name); printf("\n生日:"); puts(as[i].cs); printf("\n电话:"); puts(as[i].phone); printf("\n地址:"); puts(as[i].address); k=0; }
}
if(k==1)
printf("【查无此人】\n"); if(g==0||h==0||f==0||z==0) { do {
printf("请输入你想删的人的编号:");/*用编号在count 数组中找到as 数组中要删除人的下标,然后将最后的记录覆盖到该记录,再将现有记录数-1*/ scanf("%d%c",&a,&c); }
while(aj);
printf("确定要删除【y/n】"); scanf("%c%c",&num1,&c);
if(num1=='y') {
i=count[a-1];
strcpy(as[i].name,as[e].name); strcpy(as[e].name,sb); e=e-1; } }
do {
printf("想再删的话按【y 】, 不想按【n 】\n请选择:"); scanf("%c%c",&num2,&c); }
while(num2!='y'&&num2!='n'); }
while(num2!='n'); return(e); }
2.5查看全部记录
2.6
2.7读取
实现此功能的代码如下:
2.8 保存
实现此功能的代码如下:
3. 测试
3.1 测试说明
测试主要是为了考察系统是否按设计要求进行运行。
3.2 测试过程
边界测试数据:姓名长度16/17 记录长度 :MaxLen