C课程设计通信录管理系统.docx
- 文档编号:25203260
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:35
- 大小:316.83KB
C课程设计通信录管理系统.docx
《C课程设计通信录管理系统.docx》由会员分享,可在线阅读,更多相关《C课程设计通信录管理系统.docx(35页珍藏版)》请在冰豆网上搜索。
C课程设计通信录管理系统
课程设计任务书
课程名称C课程设计
课题通信录管理系统
任务书
通信录管理系统
程序功能:
完成对若干(上限为1万)人的通信信息进行各种管理。
设计内容:
1.确定能记录通信信息的数据结构,至少要有编号、分组、姓名、固话、手机号、QQ号码、E-mail、家庭住址等信息,它是本程序的核心数据结构,定义为如下的结构体类型:
structcomm_info{/*定义通信信息结构体类型*/
longnum;/*编号*/
chargroup[16]/*分组*/
charname[16];/*姓名*/
charhphone[16];/*固话home_phone*/
charmphone[16];/*手机号mobile_phone*/
charqq[16];/*QQ号码*/
charemail[20];/*e-mail地址*/
intlen;/*家庭住址或通信地址长度*/
char*addr;/*家庭住址或通信地址*/
structcomm_info*prev;/*前向链表指针*/
structcomm_info*next;/*后向链表指针*/
};
2.程序应具有以下基本功能:
●添加:
增加一个或几个人的记录,并可选择继续输入或退出。
●查询:
可按姓名查找某人记录,也可查找某个组的所有记录。
若找到,则显示所有人的记录,否则提示未找到,无论查找成功否,应还可选择继续查找或退出。
●删除:
删除已输入的记录。
输入姓名查找要删除的记录,若找到,提示是否确定删除,若选择是,则删除该人信息,若选择否,则取消;若没找到,提示无此人信息。
●修改:
修改某人的记录。
输入姓名并查找,若找到,显示该人的所有信息,并可进行修改;否则提示无此人信息
●排序:
可分别按分组、编号或姓名进行排序。
3.如有时间,可为程序增加以下功能:
●登录模块。
该模块在进入主界面之前先执行,用于对进入系统的用户进行身份验证,若用户输入正确的用户名及用户密码,则进入主界面,否则输入超过3次错误则退出程序。
处理方法:
用户名及用户密码可保存在一文件中,校验时从文件中读入数据进行校验。
在系统中应增加一个用户管理模块,在其中可新增用户,修改用户信息等。
●系统帮助。
显示开发者姓名、班级、开发完成日期、版本号和指导老师等信息。
目录
一、需求分析………………………………………..6
二、总体设计…………………………………………7
三、概要设计………………………………………….8
四、详细设计…………………………………………10
五、调试分析…………………………………………14
六、总结体会…………………………………………15
七、源程序清单……………………………………….15
八、参考书目…………………………………………..26
需求分析
1、程序的功能
对于M个人的学号num、姓名name、组别group、单位unit、固话telephone、qq、email进行信息输入,人数增加,删除,按姓名、学号进行查找,以及对信息建文件夹存档、读取。
2、输入输出的要求
⑴、本系统显示这样的菜单:
请选择系统功能项:
信息录入;
信息显示;
按学号查找记录;
按姓名查找记录;
删除记录;
增加记录;
保存记录;
读取记录;
按序号显示记录;
排序;
文件另存为一个自建文件;
退出系统。
⑵、执行一个具体的功能之后,按任意键,程序将重新显示菜单。
总体设计
主要函数调用关系如下
子函数调用关系如下
概要设计
1、程序的抽象数据类型的定义
信息数据结构
{学号;
姓名;
组别;
班级;
固话;
QQ;
Email;
}
2、程序的模块组成以及各个模块的功能
程序的模块组成:
a>主函数main();
b>菜单函数intmenu_select();
c>信息输入函数intenter(ADDRESSt[]);
d>记录显示函数voidlist(ADDRESSt[],intn);
e>学号查找函数voidsearch(ADDRESSt[],intn);
f>输出函数voidprint(ADDRESStemp);
g>姓名查找子函数intfind(ADDRESSt[],intn,char*s);
h>学号查找子函数intfinder(ADDRESSt[],intn,char*s);
i>记录删除函数intdelete(ADDRESSt[],intn);
j>记录插入函数intadd(ADDRESSt[],intn);
k>保存函数voidsave(ADDRESSt[],intn);
l>读入函数intload(ADDRESSt[]);
m>按序号显示记录函数voiddisplay(ADDRESSt[]);
n>排序函数voidsort(ADDRESSt[],intn);
o>姓名查找函数voidqseek(ADDRESSt[],intn);
p>文件复制函数voidcopy();
main函数通过switch语句调用menu_select()函数进入各个菜单。
各函数的主要功能描述如下:
intenter(ADDRESSt[]);输入学生的各项信息。
voidlist(ADDRESSt[],intn);显示学生的各项信息。
voidsearch(ADDRESSt[],intn);按学号查找学生的信息。
intdelete(ADDRESSt[],intn);按学生的姓名删除该学生的记录。
intadd(ADDRESSt[],intn);插入新的纪录。
voidsave(ADDRESSt[],intn);把输入的记录保存在当先文件夹内。
intload(ADDRESSt[]);读入先前保存的记录。
voiddisplay(ADDRESSt[]);按序号查找记录,序号为列表从上到下的循序。
voidsort(ADDRESSt[],intn);按姓名排序。
voidqseek(ADDRESSt[],intn);按学生姓名查找记录。
voidcopy();把记录报寻到另一指定的文件夹。
intmenu_select();显示菜单界面,通向各个菜单。
详细设计
点击编译连接并运行按钮
,出现字幕pressanykeyentermenu……,按任意键出现如下界面
0.Enterrecord
选择0.Enterrecord选项按回车键输入3组记录记录
1.listthefile
回车进入主菜单后,选择1.listthefile出现如下界面
2.Searchrecordonnum
按任意键进入菜单后,选择2.Searchrecordonnum出现如下界面
回车出现如下界面
3.Searchrecordonname
按任意键进入主菜单后,选择3.Searchrecordonname输入名字zhang后出现如下界面
4.Deletearecord
按任意键进入主菜单后,选择4.Deletearecord选项后输入li后出现如下界面
输入1、回车后,在在主菜单中选择1.Listthefile选项后出现如下界面
5.addrecord
按任意键进入主菜单后,选择5.addrecord选项,输入如下信息后输入zhang,再在主菜单中选择1.Listthefile选项,出现如下界面
6.Savethefile
按任意键进入主菜单后,选择6.Savethefile,出现如下界面
可以在当前文件夹找到相应文件
相应文件
7.Loadthefile
关闭运行窗口,重新打开后,在主菜单中选择7.Loadthefile选项,按任意键进入主菜单后选择1.Listthefile出现如下界面
8.displayrecordonorder
按任意键进入主菜单后,选择8.displayrecordonorder选项,输入序号2,出现如下界面
9.sorttomakenewfile
按任意键进入主菜单后,选择9.sorttomakenewfile选项,任意键后回到主菜单
10.copythefiletonewfile
按任意键进入主菜单后,选择10.copythefiletonewfile选项,输入d:
\file.txt:
回车后出现如下界面
在D盘可以找到相应的文件
相应文件
11.Quit
按任意键进入主菜单后,选择11.Quit选项,退出程序
调试分析
在调试过程中,seach函数调用finder函数,而delete函数和add函数都要调用find函数,在整个程序中,find为最核心的函数,所以要增加程序功能只,改动find函数是非常麻烦的。
所以在增加search函数是,没有改动find而是仿照find增加了一个finder函数。
在其他功能的改动和添加上,也是同样的尽量不改动find函数。
整个调试过程是需要细心检查和不断修改的。
总结体会
此次课程设计使得我学会更细心的去做一件事。
懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在编写过程中,我逐步的了解了程序模块化设计的思想含义。
在整个程序设计的过程中语法的错误还是比较容易检查的,但是对于那些逻辑思维的问题方面的缺陷不易查出,因此常常出现系统提示没有错误但是仍然不能够正常运行的境况,尽管有很多不足之处,但我在整个系统程序设计的过程中,我可以感受到自己对C语言有了一定的掌握,对整体的把握度也提高了很多。
源程序清单(带注释)
#include"stdio.h"/*I/O函数*/
#include"conio.h"/*屏幕操作函数*/
#include"string.h"/*字符串函数*/
#include"ctype.h"/*字符操作函数*/
#defineM50/*定义常数表示记录数*/
typedefstruct/*定义数据结构*/
{
charname[20];/*姓名*/
charunits[30];/*单位*/
chartele[10];/*电话*/
charqq[10];/*QQ*/
charemail[20];
charnum[10];/*编号*/
chargroup[16];/*分组*/
}ADDRESS;
/******以下是函数原型*******/
intenter(ADDRESSt[]);/*输入记录*/
voidlist(ADDRESSt[],intn);/*显示记录*/
voidsearch(ADDRESSt[],intn);/*按姓名查找显示记录*/
intdelete(ADDRESSt[],intn);/*删除记录*/
intadd(ADDRESSt[],intn);/*插入记录*/
voidsave(ADDRESSt[],intn);/*记录保存为文件*/
intload(ADDRESSt[]);/*从文件中读记录*/
voiddisplay(ADDRESSt[]);/*按序号查找显示记录*/
voidsort(ADDRESSt[],intn);/*按姓名排序*/
voidqseek(ADDRESSt[],intn);/*快速查找记录*/
voidcopy();/*文件复制*/
voidprint(ADDRESStemp);/*显示单条记录*/
intfind(ADDRESSt[],intn,char*s);/*查找函数*/
intmenu_select();/*主菜单函数*/
/******主函数开始*******/
main()
{
inti;
ADDRESSadr[M];/*定义结构体数组*/
intlength;/*保存记录长度*/
clrscr();/*清屏*/
for(;;)/*无限循环*/
{
switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/
{
case0:
length=enter(adr);break;/*输入记录*/
case1:
list(adr,length);break;/*显示全部记录*/
case2:
search(adr,length);break;/*查找记录*/
case3:
qseek(adr,length);break;/*快速查找记录*/
case4:
length=delete(adr,length);break;/*删除记录*/
case5:
length=add(adr,length);break;/*插入记录*/
case6:
save(adr,length);break;/*保存文件*/
case7:
length=load(adr);break;/*读文件*/
case8:
display(adr);break;/*按序号显示记录*/
case9:
sort(adr,length);break;/*按姓名排序*/
case10:
copy();break;/*复制文件*/
case11:
exit(0);/*如返回值为11则程序结束*/
}
}
}
/*菜单函数,函数返回值为整数,代表所选的菜单项*/
menu_select()
{
char*f[]=
{
"**************MENU*************",
"0.Enterrecord",
"1.Listthefile",
"2.Searchrecordonnum\n",
"3.Searchrecordonname",
"4.Deletearecord",
"5.addrecord",
"6.Savethefile",
"7.Loadthefile",
"8.displayrecordonorder",
"9.sorttomakenewfile",
"10.copythefiletonewfile",
"11.Quit",
};
chars[80];
inti;
intkey=0;/*记录所压键值*/
intc=0;
gotoxy(1,25);/*移动光标*/
printf("pressanykeyentermenu......\n");/*压任意键进入主菜单*/
getch();
clrscr();/*清屏*/
textcolor(YELLOW);/*设置文本颜色为黄色*/
textbackground(GREEN);/*设置背景颜色为兰色*/
gotoxy(10,2);
putch(0xda);/*输出左上角边框┏*/
for(i=1;i<44;i++)
putch(0xc4);/*输出上边框水平线*/
putch(0xbf);/*输出右上角边框┓*/
for(i=3;i<22;i++)/*输出左右两边的垂直线*/
{
gotoxy(10,i);putch(0xb3);
gotoxy(54,i);putch(0xb3);
}
gotoxy(10,22);putch(0xc0);/*输出左上角边框┗*/
for(i=1;i<44;i++)
putch(0xc4);/*输出下边框水平线*/
putch(0xd9);/*输出右下角边框┛*/
window(11,3,53,21);/*制作显示菜单的窗口,大小根据菜单条数设计*/
clrscr();/*清屏*/
for(i=0;i<13;i++)
{
gotoxy(10,i+1);
cprintf("%s",f[i]);/*输出菜单项数组*/
}
i=1;
gotoxy(10,2);/*设置默认选项在第一项*/
textbackground(LIGHTBLUE);/*设置背景颜色为浅绿*/
cprintf("%s",f[1]);/*输出菜单项,表示选中*/
gotoxy(10,2);/*移动光标到菜单的第一项*/
while(key!
=13)/*所压键不是回车键时*/
{
while(bioskey
(1)==0);/*查询是否压下了一个键*/
key=bioskey(0);/*返回下一个在键盘压下的键*/
key=key&0xff?
key&0xff:
key>>8;/*对所压的键进行判断*/
gotoxy(10,i+1);
textbackground(LIGHTGREEN);/*设置背景颜色为蓝色*/
cprintf("%s",f[i]);/*输出菜单项*/
if(key==72)i=i==1?
12:
i-1;/*如压向上光标键↑,i减1,如已到第一行再上移,则到最后一行*/
if(key==80)i=i==12?
1:
i+1;/*如压向下光标键↓,i加1,如已到最后一行再下移,则到第一行*/
gotoxy(10,i+1);/*光标移动i的下一项*/
textbackground(LIGHTBLUE);/*将背景颜色设为浅绿*/
cprintf("%s",f[i]);/*输出菜单项*/
c=i-1;/*给代表菜单选项的整数赋值*/
}
textbackground(BLACK);/*设置背景颜色为黑色*/
window(1,1,80,25);/*恢复原窗口大小*/
clrscr();/*清屏*/
returnc;/*返回代表菜单选项的整数值*/
}
/***输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/
intenter(ADDRESSt[])
{
inti,n;
char*s;
clrscr();/*清屏*/
printf("\npleaseinputthenumofstudent\n");/*提示信息*/
scanf("%d",&n);/*输入记录数*/
printf("pleaseinputrecord\n");/*提示输入记录*/
printf("numnamegroupunittelephoneqqemail\n");
printf("---------------------------------------------------------------------------\n");
for(i=0;i { scanf("%s%s%s%s%s%s%s",t[i].num,t[i].name,t[i].group,t[i].units,t[i].tele,t[i].qq,t[i].email);/*输入记录*/ printf("-------------------------------------------------------------------------\n"); } returnn;/*返回记录条数*/ } /*显示记录,参数为记录数组和记录条数*/ voidlist(ADDRESSt[],intn) { inti; clrscr(); printf("\n\n****************************ADDRESS****************************************\n"); printf("numnamegroupunittelephoneqqemail\n"); printf("-------------------------------------------------------------------------------\n"); for(i=0;i printf("%-8s%-10s%-10s%-10s%-12s%-12s%-20s\n",t[i].num,t[i].name,t[i].group,t[i].units,t[i].tele,t[i].qq,t[i].email); if((i+1)%10==0)/*判断输出是否达到10条记录*/ { printf("Pressanykeycontinue...\n");/*提示信息*/ getch();/*压任意键继续*/ } printf("***********************************end*****************************************\n"); } /*查找记录*/ voidsearch(ADDRESSt[],intn) { chars[20];/*保存待查找姓名字符串*/ inti;/*保存查找到结点的序号*/ clrscr();/*清屏*/ printf("pleasepressthenumforseek\n"); scanf("%s",s);/*输入待查找姓名*/ i=finder(t,n,s);/*调用find函数,得到一个整数*/ if(i>n-1)/*如果整数i值大于n-1,说明没找到*/ printf("notfound\n"); else print(t[i]);/*找到,调用显示函数显示记录*/ } /*显示指定的一条记录*/ voidprint(ADDRESStemp) { clrscr(); printf("\n\n***************************************************************************\n"); printf("numnamegroupunittelephoneqqemail\n"); printf("-------------------------------------------------------------------------------\n"); printf("%-8s%-10s%-10s%-10s%-12s%-12s%-20s\n",temp.num,temp.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 通信 管理 系统