资源描述
《C语言程序设计》
课程设计报告书
题目:通讯录程序设计
系 别:计算机工程系
专 业:计算机网络
设计班级:网12
姓 名:胡玉婷
学 号:
指导教师:耀军、新爱
二○一一年六月七日
一、课程设计(论文)的容
编写学生通讯录程序,包括以下功能模块:
1、通讯录的每一条信息包括学号、、(字符数组)。
2、输入功能:可以一次完成若干条信息的输入。
3、显示功能:完成全部通讯录信息的显示。
4、查找功能:完成按查找通讯信息,并显示。
5、增加功能:增加通讯信息。
6、删除功能:完成按删除通讯信息。
7、将通讯录信息存在文件addrbook中。
8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
二、课程设计(论文)的要求与数据
1、用C语言实现系统;
2、利用结构体数组或动态链表实现学生通讯录的数据结构设计;
3、系统具有增加,查询,删除等基本功能;
4、系统的各个功能模块要求用函数的形式实现;
5、将通讯录信息存在文件中;
6、完成设计任务并编写课程设计说明书。
7、每个同学提交源程序(*.c),可执行程序(*.exe),保存通讯录信息的文件addrbook,课程设计说明书电子文档(word)。
每班交一光盘,包含所有学生的资料(按学号排序),每个学生的资料放在以学号命名的文件夹中。
三、课程设计(论文)应完成的工作
1.完成程序的编制、调试,并能正确运行。
2.完成课程设计说明书的编写,其容包括
(1)封面
(2)任务书
(3)目录
(4)正文
(1)总体设计(包含几大功能模块)。
(2)详细设计(各功能模块的具体实现算法——流程图)
(3)数据结构设计描述,各模块(函数)的功能介绍,参数说明等。
(4)调试分析(包含各模块的测试用例,与测试结果。)
(5)总结(课程设计完成了哪些功能,还有哪些地方需要改进,与通过一周的课程设计有何收获,调试程序的体会等)
(5)参考文献
四、应收集的资料与主要参考文献
[1] 谭浩强著. C程序设计(第三版). :清华大学,2005
[2] 谭浩强著. C程序设计题解与上机指导. :清华大学,2005
目 录
一、总体设计(包含几大功能模块)4
二、详细设计(各功能模块的具体实现算法——流程图)5
第一个函数为输入函数:5
第二函数为显示函数:5
第三个函数为查找函数:5
第四为排序函数6
第五为插入函数:6
第六删除函数.7
三、数据结构设计描述,各模块(函数)的功能介绍,参数说明等9
(一):结构设计描述9
(二)功能介绍9
四、调试分析(包含各模块的测试用例,与测试结果)。12
五、总结(课程设计完成了哪些功能,还有哪些地方需要改进,与通过一周的课程设计有何收获,调试程序的体会等)16
六、参考文献16
一、总体设计(包含几大功能模块)
1、 输入功能
2、 显示功能
3、 查找功能
(1)用学号查找
(2)用查找
4、 删除功能
5、 插入功能
6、 排序功能
7、 复制功能
二、详细设计(各功能模块的具体实现算法——流程图)
第一个函数为输入函数:N-S流程图:
定义整型变量i,j.
for(i=0;i<SIZE;i++)
输入学生的学号.、性别。
sum=0
打开文件“score.dat”
将数据写入文件
关闭文件
第二函数为显示函数:
N-S流程图:
打开文件“stu.dat”
将数据读出显示出来
关闭文件
第三个函数为查找函数:N-S流程图:
定义整型i,n,定义字符型数组
打文件“stu.dat”
将文件数据读出 并确定记录个数n
关闭文件
打印“输入学号”
输入要查找的学号
输入学号分别与文件中各学号对比
是一样
不同
把这个学号对应学生资料打印出来
第四为排序函数:
N-S流程图
定义整型I,j,n,结构体变量struct student temp
打开文件
将文件数据读出 并确定记录个数n
关闭文件
for(I=0;I<n;I++)
for(j=i+1;j<n;j++)
strcmp(stu[i].num,stu[j].num)>0)
T
F
交换I,j两项
打开文件
for(I=0;I<n;I++)
排好n个记录写入文件
显示该记录的学号、
关闭文件
第五为插入函数:
N-S流程图:
定义整型i,j,n结构体变量s
打印”输入学号:”
输入学号
打印”输入:”
输入
打印”输入:”
输入
打开文件 stu .dat
将文件数据读出 并确定记录个数n
关闭文件
使新记录赋给stu[n],n=n+1
打开文件
for(i=0;i<n;i++)
向文件输出数据并显示
关闭文件
第六删除函数.
N-S流程图:
定义整形i,j,n,flag,字符数组name
打开文件stu.dat
读取文件数据并确定记录个数n
关闭文件
n=i
输入待删除学生的name
For(flag=1,i=0,flag&&<n;I++)
strcmp(name,stu[i].name)==0
T
F
for(j=i;j<n-1;j++)
将第j+1个学生的数据移到第j个
flag=1
Flag=1
T
F
n=n-1
显示"没有发现"
打开stu.dat文件
for(i=0;i<n;i++)
将第i个学生的数据写入文件并显示
关闭文件
三、数据结构设计描述,各模块(函数)的功能介绍,参数说明等
(一):结构设计描述
用#include<stdio.h>#include<string.h>命令;用宏定义SIZE以便修改学生数目;定义结构体用于输入学生数据资料。
主函数,main()前不加void编译系统会提示funstion should return a value,不过不会出错。在主函数开头先声明子函数,设一界面菜单,用do-while语句实现不断执行直到选择退出。
(二)功能介绍
1输入功能
可以一次完成若干条信息的输入。并将输入的数据保存在文件stu.dat中.
2显示功能
如,将上面的输入的数据显示出来:
*********************************************************
No. name phone
*********************************************************
06693宋昌恩 234567
06694 王淑其 234568
06695王壮辉 234569
06696 吴浩龙 234570
*********************************************************
3查找功能
在主函数开头先声明子函数,设一界面菜单,用do-while语句实现不断执行直到选择学号或查找、还是退出。
(1) 用学号查找
定义字符型数组用于输入要查找的学生学号。
如:输入学号:06694
显示
Input num:06694
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
The record you search is
:No. name phone
06694 王淑其 234568
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
(2)用插入功能
用查找该学生的资料:(跟学号一样都是字符型,在比较输入的/学号都是用strcmp()实现的。原理一样。只是把学号换成。如:输入: 打印结果跟上一题一样。)
如输入 王淑其
显示
Input name:王淑其
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
The record you search is
:No. name phone
06694 王淑其 234568
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
4 删除功能
按删除 若有两个一样的 则两个一起删除;删除后把新的记录写人文件并显示出来 ;
5 增加功能
可无限的增加记录;记录后把新的记录写人文件并显示出来 ;
6 排序功能
可根据学好由小到大排序;排序后新的记录写人文件并显示出来 ;
原来的记录为:
显示:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
No. name phone
l * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
06694 王淑其 234568
06693宋昌恩 234567
06695王壮辉 234569
06696 吴浩龙 234570
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
排序后的结果显示:
No. name phone
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
06693宋昌恩 234567
06694 王淑其 234568
06695王壮辉 234569
06696 吴浩龙 234570
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
7 复制功能
可把当前记录从stu.dat复制到别的文件;
四、调试分析(包含各模块的测试用例,与测试结果)。
1输入功能
请选择(0~7):
0
Input score of student1:
NO.:06694
name:王淑其
phone:234568
Input score of student2:
NO.:06693
name:宋昌恩
phone:234567
Input score of student3:
NO.:06695
name:王壮辉
phone:234569
Input score of student4:
NO.:06696
name:吴浩龙
phone:234570
Input score of student5:
NO.:00
name:
phone:234571
2显示功能
请选择(0~7):
1
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
No. name phone
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
06694 王淑其 234568
06693 宋昌恩 234567
06695 王壮辉 234569
06696 吴浩龙 234570
00 234571
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
3查找功能
请选择(0~7):
2
* * * * * * * * MENU* * * * * * * * * * * * * * * * * * * * * * * * * * * *
8----------------------用学号查找.
9----------------------用查找
10---------------------安全退出.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
(1)用学号查找
请选择(8~10):
8
Input num:06694
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
The record you search is
:No. name phone
06694 王淑其 234568
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
(2)用查找
请选择(8~10):
9
Input name:王淑其
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
The record you search is
:No. name phone
06694 王淑其 234568
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
4删除功能
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
请选择(0~7):
3
Input name deleted:
Now the list is:
?* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
No. name phone
06694 王淑其 234568
06693 宋昌恩 234567
06695 王壮辉 234569
06696 吴浩龙 234570
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
5插入功能
请选择(0~7):
4
NO.:06697
name:丹萍
phone:234572
Now the new list is:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
No. name phone
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
06694 王淑其 234568
06693 宋昌恩 234567
06695 王壮辉 234569
06696 吴浩龙 234570
06697 丹萍 234572
6排序功能
请选择(0~7):
5
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
No. name phone
06693 宋昌恩 234567
06694 王淑其 234568
06695 王壮辉 234569
06696 吴浩龙 234570
06697 丹萍 234572
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
五、源程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
# define SIZE 5
# define LEN sizeof(struct student)
struct student
{
char num[10];
char name[20];
char phone[15];
}stu[SIZE];
void main()
{void enter(void);
void list(void);
void search(void);
void Delete(void);
void sort(void);
void add(void);
void copy(void);
int m;
do
{printf("* * * * * * * * * ** * * * *MENU * * * * * * * * * * * * * * * * * * * * *\n");
printf(" 0--------输入资料\n");
printf(" 1--------显示资料\n");
printf(" 2--------查找已有的记录\n");
printf(" 3--------删除一个记录\n");
printf(" 4--------添加记录\n");
printf(" 5--------重新排序\n");
printf(" 6------- 复制\n");
printf(" 7--------安全退出\n");
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\n请选择(0~7):\n");
scanf("%d",&m);
switch(m)
{case 0:enter();break;
case 1:list();break;
case 2:search();break;
case 3:Delete();break;
case 4:add();break;
case 5:sort();break;
case 6:copy();break;
case 7:exit(0);
default:printf("input error.\n");break;
}
}while(m!=7);
}
void enter(void)
{FILE*fp;
int i,j;
for(i=0;i<SIZE;i++)
{printf("\nInput score of student%d:\n",i+1);
printf("NO.:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
printf("phone:");
scanf("%s",stu[i].phone);
}
if((fp=fopen("stu.dat","wb"))==NULL)
{printf("Can not open the file.\n");
exit(0);
}
for(i=0;i<SIZE;i++)
if(fwrite(&stu[i],LEN,1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
void list(void)
{
FILE*fp;
int i,n;
if((fp=fopen("stu.dat","rb"))==NULL)
{printf("Can not open the file.\n");
exit(0);
}
for(i=0;fread(&stu[i],LEN,1,fp)!=0;)i++;
n=i;
for(i=0;i<n;i++)
fread(&stu[i],LEN,1,fp);
fclose(fp);
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("No.\tname\tphone\n");
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
for(i=0;i<n;i++)
printf("%s\t%s\t%s\n",stu[i].num,stu[i].name,stu[i].phone);
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
}
void search(void)
{void sea_num(void);
void sea_name(void);
int b;
do{
printf("* * * * * * * * * * * * * *MENU * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" 8----------------------用学号查找.\n" );
printf(" 9----------------------用查找.\n");
printf(" 10---------------------安全退出.\n");
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\n请选择(8~10):\n");
scanf("%d",&b);
switch(b)
{case 8:sea_num();break;
case 9:sea_name();break;
case 10:break;
default:printf("input error.\n");break;
}
}while(b!=10);
printf("exit.\n");
}
void sea_num(void)
{FILE*fp;
int i,flag,n;
char num[10];
if((fp=fopen("stu.dat","rb"))==NULL)
{printf("Can not open the file.\n");
exit(0);
}
for(i=0;fread(&stu[i],LEN,1,fp)!=0;)i++;
n=i;
for(i=0;i<n;i++)
fread(&stu[i],LEN,1,fp);
fclose(fp);
printf("\nInput num:");
scanf("%s",num);
for(flag=0,i=0;i<n;i++)
{if(strcmp(num,stu[i].num)==0)
{printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("The record you search is\n:");
printf("No.\tname\tphone\n");
printf(" %s\t%s\t%s\n",stu[i].num,stu[i].name,stu[i].phone);
flag=1;
}
}
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
if(flag!=1)printf("Not found the record\n");
}
void sea_name(void)
{FILE*fp;
int i,j,flag,n;
char name[10];
if((fp=fopen("stu.dat","rb"))==NULL)
{printf("Can not open the file.\n");
exit(0);
}
for(i=0;fread(&stu[i],LEN,1,fp)!=0;)i++;
n=i;
for(i=0;i<n;i++)
fread(&stu[i],LEN,1,fp);
fclose(fp);
printf("\nInput name:");
scanf("%s",name);
for(flag=0,i=0;i<n;i++)
{if(strcmp(name,stu[i].name)==0)
{printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("The record you search is\n:");
printf("No.\tname\tphone\n");
printf(" %s\t%s\t%s\n",stu[i].num,stu[i].name,stu[i].phone);
flag=1;
}
}
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
if(flag!=1)printf("Not found the record\n");
}
void sort(void)
{FILE*fp;
int i,j,n;
struct student temp;
if((fp=fopen("stu.dat","rb"))==NULL)
{printf("Can not open the file.\n");
exit(0);
}
for(i=0;fread(&stu[i],LEN,1,fp)!=0;)i++;
n=i;
for(i=0;i<n;i++)
fread(&stu[i],LEN,1,fp);
fclose(fp);
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(strcmp(stu[i].num,stu[j].num)>0)
{temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("No.\tname\tphone\n");
for(i=0;i<n;i++)
printf("%s\t%s\t%s\n",stu[i].num,stu[i].name,stu[i].phone);
fp=fopen("stu.dat","wb");
for(i=0;i<n;i++)
fwrite(&stu[i],LEN,1,fp);
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
fclose(fp);
}
void add(void)
{
int i,j,n;
FILE*fp;
struct student s;
printf("NO.:");
scanf("%s",s.num);
printf("name:");
scanf("%s",s.name);
printf("phone:");
scanf("%s",s.phone);
if((fp=fopen("stu.dat","rb"))==NULL)
{printf("\nCan not open the file.\n");
exit(0);
}
for(i=0;fread(&stu[i],LEN,1,fp)!=0;)i++;
n=i;
for(i=0;i<n;i++)
fread(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
strcpy(stu[n].name,s.name);
strcpy(stu[n].num,s.num);
strcpy(stu[n].phone,s.phone);
n=n+1;
printf("\nNow the new list is:\n");
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("No.\tname\tphone\n");
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
fp=fopen("stu.dat","wb");
for(i=0;i<n;i++)
{fwrite(&stu[i],sizeof(struct student),1,fp);
printf("%s\t%s\t%s\n",stu[i].num,stu[i].name,stu[i].phone);
}
fclose(fp);
}
void Delete(void)
{FILE*fp;
int i,j,n,flag;
char name[10];
if((fp=fopen("stu.dat","rb"))==NULL)
{printf("\nCan not open the file.\n");
exit(0);
}
for(i=0;fread(&stu[i],LEN,1,fp)!=0;)i++;
n=i;
printf("\nInput name deleted:");
scanf("%s",name);
for(flag=1,i=0;i<n;i++)
{if(strcmp(name,stu[i].name)==0)
{for(j=i;j<n-1;j++)
{strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].num,stu[j+1].num);
strcpy(stu[j].phone,stu[j+1].phone);
}
flag=0;
n=n-1;
}
}
printf("\nNow the list is:\n?");
fp=fopen("stu.dat","wb");
for(i=0;i<n;i++)
fwrite(&stu[i],LEN,1,fp);
fclose(fp);
fp=fopen("stu.dat","rb");
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("No.\tname\tphone\n");
for(i=0;fread(&stu[i],LEN,1,fp)!=0;i++)
printf("%s\t%s\t%s\n",stu[i].num,stu[i].name,stu[i].phone);
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
if(flag)
printf("\nNot found the record\n");
fclose(fp);
}
void copy(void)
{FILE * in,* out;
if((in=fopen("stu.dat","rb"))==NULL)
{printf("Can not open the infile.\n");
exit(0);
}
if((out=fopen("stu2.dat","wb"))==NULL)
{printf("Can not open the outfile.\n");
exit(0);
}
wh
展开阅读全文