面向过程计课程设计.docx
《面向过程计课程设计.docx》由会员分享,可在线阅读,更多相关《面向过程计课程设计.docx(24页珍藏版)》请在冰点文库上搜索。
![面向过程计课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/6f458e1e-f3b3-4735-b732-08e58aa3120d/6f458e1e-f3b3-4735-b732-08e58aa3120d1.gif)
面向过程计课程设计
课程设计报告
课程名称:
高级语言程序设计
课程设计题目:
通讯管理系统
姓名:
马娇
学号:
1106050540060
组员:
冯景荣
学院:
数学与计算机科学学院
专业:
计算机科学与技术
年级:
2011级
指导教师:
向程冠
二○一三年七月
目录
摘 要3
Abstract4
1.引言5
2.设计的目的6
3.设计的内容6
3.1问题的提出6
3.2功能要求7
4.概要设计7
4.1通讯管理系统的功能7
5.详细设计7
5.1主界面设计7
5.2新建界面设计8
5.3查找界面8
5.4修改界面9
5.5删除界面9
6.总结10
6.1本程序的局限性及改进方法10
6.2运用本程序还可以编写10
6.3在课程设计过程中遇到的问题10
6.4心得体会与收获10
7.参考资料11
8.附录11
指导教师评阅意见20
摘 要
21世纪以来,人类经济高速发展,人们的生活发生着日新月异的变化,特别是计算机的应用与普及到经济、教育和社会生活的各个领域。
随着计算机在社会各个领域的广泛应用,自动控制、无纸化自动办公、企业信息化、网上书店、网上娱乐等等都是信息时代的产物。
随着信息化的潮流,通讯录的管理也越来越系统化。
通讯录管理系统是典型的管理信息系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
对于前者要求建立起数据一致性和完整性强、数据安全性好的库。
而对于后者则要求应用程序功能完备,易使用等特点。
经过分析,我们使用VisualC++开发工具,利用其提供的各种面向过程的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。
关键字:
通讯录,管理信息系统 ,MIS ,VisualC++
Abstract
Sincetwenty-firstCentury, thehigh-speeddevelopmentofhumaneconomy, undergoing changerapidly changestopeople'slife, especiallytheapplicationofcomputer andspreadtoeconomic, educationalandsocial life eachdomain. Withthewideapplicationof computer inallareasofsociety,automaticcontrol, automatedpaperlessoffice, enterpriseinformation, onlinebookstore, onlineentertainmentandsoonaretheproductoftheinformationage. With thetrendofinformationtechnology, maillist managementmoreandmoresystematic.
Maillist management systemisatypicalmanagementinformationsystem (MIS), itsdevelopmentmainly includestwoaspects:
thesettingandmaintenanceofdatabaseand front-endapplicationdevelopment. Fortheformerrequirementtoestablishdata consistencyandintegrity strong, thedatasecuritygoodstorehouse. Forthelatterrequest applicationprocedurefunctioniscomplete, easytouseandsooncharacteristics.
Afteranalysis, we useVisualC++developmenttools, providedbytheuseofa varietyof processoriented developmenttools,especiallydata windowcanbeconvenientand simplemanipulationoftheintelligentobjectdatabase, thefirstinashort timeestablishesthesystemapplicationprototype, then,fortheinitialprototype systemneedsiteration, andconstantlyrevisedandimproved, untilthe formstheusersatisfiedfeasiblesystem.
Keywords:
maillist, managementinformation system, MIS, VisualC++
1.引言
在各行各业迅速发展的今天,大量信息的储存原本应该加大各行业工作人员的工作量。
但是由于计算机的广泛应用,信息管理系统得到了很大程度的优化。
这样的改变不仅提高了工作效率,而且很大程度的增强了安全性。
尤其对于复杂的信息管理,计算机能够充分发挥其优越性。
计算机与信息管理与进行信息管理系统的开发密切相关。
系统开发是系统管理的前提。
本系统是就通讯录的管理和使用设计的。
通讯录管理系统主要提供网上的通讯录平台,用户可以通过该系统注册信息管理信息等。
在通讯录系统中,用户可以方便地对好友的信息进行阅览和查询,不需要在书本中翻找纸质的通讯录,大大节省了用户的时间,为用户提供了便利。
2.设计的目的
运用数据结构中的算法思想做数据结构,结合C语言基本知识,编写一个通讯录管理系统。
通过完成本课程设计,进一步熟悉C语言的基本知识,并进一步掌握数据结构的一些基本算法思想,掌握C语言的文件操作,进一步熟悉指针的用法,数组的建立运用和函数的调用等。
加深对数据结构的理解,提高算法设计能力,锻炼编程的能力。
用C语言编写一个通讯录管理软件,要求能实现通讯录管理系统中增加新纪录,删除记录,显示通讯录信息,按姓名或号码查询信息等功能。
其中,输入的每条记录包括有姓名(sName)、电话(tel)、固定电话(sMovtel)、邮编(Emaile)、家庭住址(assort)五项。
3.设计的内容
3.1问题的提出
(1)实现查询功能:
按姓名或号码查询,显示全部信息。
(2)实现添加功能:
能根据姓名添加新的数据。
(3)实现修改信息功能:
先判断,后修改,注意电话号码只允许11位。
(4)实现删除功能:
先判断,后删除。
(5)退出。
3.2功能要求
(1)贯彻结构化的程序设计思想。
(2)用户界面友好,功能明确,操作方便。
(3)用户界面中的菜单应包括“按姓名查询”、“显示全部信息”、“修改手机号码”、“删除”、“退出”5项。
(4)代码应适当缩进,并给出必要的注释,以增强程序的可读性。
4.概要设计
4.1通讯管理系统的功能
通讯录中的联系人包含以下信息项:
姓名、手机、固定电话、电子邮箱、家庭住址。
系统的主要功能包括:
(1)输入联系人的信息,要求:
至少输入10个联系人的数据,且注意数据的多样性。
(2)添加联系人的信息,在已经存在的通讯录文件中添加若干个联系人要求:
添加后仍按联系人的姓名排序,并保存至原文件。
(3)删除联系人的信息,输入一个姓名或电话号码,若通讯录中有该联系人的信息,则删除该联系人,否则输出提示信息,并提示用户选择是否继续进行删除操作。
(4)修改联系人的信息,输入一个姓名或电话号码,根据具体需要修改该联系人的某一项信息,将修改后的信息重新保存到通讯录文件中,并提示用户选择是否继续进行修改操作。
(5)按不同条件对通讯录进行查询操作,输出满足条件的联系人的信息。
按姓名查询,包括精确查询(输入全名),模糊查询(输入姓);按手机号码查询,输入全部号码或号码位段(如输入130、133、139等)。
(6)输出联系人的信息,按一定格式输出信息,保证信息排列整齐美观。
5.详细设计
5.1主界面设计
图1主界面
Fig1MainView
5.2新建界面设计
图2新建界面
Fig2NewView
5.3查找界面
图3查找界面
Fig3SearchView
5.4修改界面
图4修改界面
Fig4EditView
5.5删除界面
图5删除界面
Fig5DropView
6.总结
6.1本程序的局限性及改进方法
本程序的局限性及改进方法本程序的局限性及改进方法本程序的局限性及改进方法。
本程序中包含的信息不够全面,比如年龄,性别,通讯地址,电子邮箱等,都没有包含。
改进方法就是在设计程序时把这些内容都加进去,电子邮箱还可以建立链接。
6.2运用本程序还可以编写
运用本程序还可以编写比如运用本程序还可以编写对学生信息的管理系统,商店,超市里面对商品的管理,仓库里面对货物的查询等等。
6.3在课程设计过程中遇到的问题
课程设计过程中遇到的问题,解决的办法 1、从文本中写入数据时可能指针指错位置,导致不能正常进行。
解决的办法是对指针进行必要跟踪,把该函数写入独立的cpp文件中,单个进行检查。
2、从文本文件中载入数据时,当记录数为1的时,出现内存不能读的情况,当记录数为0时,当前记录数和总记录数以及用户信息显示的情况比较特殊,解决的办法是分三种情况,写段程序分别进行处理。
6.4心得体会与收获
通过这次课程设计,让我们对很多的函数有了新的认识,对C语言有了更深刻的了解,增强了程序的编写能力,巩固了专业知识,写软件的过程中我又学到啦曾经自己不知道的函数或是自己不会的函数的用法。
特别是文件的开启和关闭,读与写。
这次课程设计课总的来说让我们受益匪浅。
虽然在调试程序遇到了很多的困难,但是都一一去把它解决了。
从中也让我知道了要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。
因记我们学习知识就是记了实践。
而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。
7.参考资料
[1]谭浩强.C程序设计(第三版).北京:
清华大学出版社.2005
8.附录
相关源代码如下:
#include
#include
typedefstructFriends
{
charsName[30];
inttel;
intsMovtel;
inthome;
charEmaile[30];
charassort[30];
}Friends;
intc;
voidjianli();
voidsearch();
voidamend();
voidchange();
voidinput(Friends*p);
voidoutput(Friends*p);
voidsdele();
voidfugai();
intmain()
{
inta,b=1;
chars;
while(b==1)
{
printf("\t\t通讯录\n");
printf("\t1、新建\n");
printf("\t2、查找\n");
printf("\t3、修改\n");
printf("\t4、删除\n");
printf("请选择.......\n");
scanf("%d",&a);
switch(a)
{
case1:
jianli();break;
case2:
search();break;
case3:
amend();break;
case4:
sdele();break;
}
printf("是否返回主菜单('Y'or'N')\n");
fflush(stdin);
scanf("%c",&s);
if(s=='y'||s=='Y')
b=1;
else
break;
}
return0;
}
/*
新建
*/
voidjianli()
{
intb=1;
chard;
Friendsx;
FILE*fp;
fp=fopen("e:
\\通讯录.txt","ab");
while(b==1)
{
input(&x);
fwrite(&x,sizeof(x),1,fp);
printf("是否继续新建('Y'or'N')?
\n");
fflush(stdin);
scanf("%c",&d);
if(d=='y'||d=='Y')
{
b=1;
}
else
break;
}
fclose(fp);
}
/*
查找
*/
voidsearch()
{
inth,j=1,n=0,num;
chark[20];
FILE*fp;
Friendsy;
printf("\t1、按号码查找\n");
printf("\t2、按姓名查找\n");
printf("请选择...........\n");
scanf("%d",&h);
if(h==1)
{
printf("\t请输入你查找的号码!
\n");
while(j==1)
{
scanf("%d",&num);
fp=fopen("e:
\\通讯录.txt","rb");
while(!
feof(fp))
{
fread(&y,sizeof(y),1,fp);
if(num==y.sMovtel)
{
output(&y);
break;
}
}
if(num!
=y.sMovtel)
{
printf("你输入的号码有误!
!
!
\n请重新输入\n");
j=1;
}
fclose(fp);
}
}
if(h==2)
{
printf("\t请输入你查找的姓名!
\n");
while(j==1)
{
scanf("%s",k);
fp=fopen("e:
\\通讯录.txt","rb");
while(!
feof(fp))
{
fread(&y,sizeof(y),1,fp);
if(strcmp(k,y
.sName)==0)
{
output(&y);
break;
}
}
if(strcmp(k,y.sName)!
=0)
{
printf("你输入的姓名有误!
!
!
\n请重新输入\n");
j=1;
}
fclose(fp);
}
}
}
/*
修改
*/
voidamend()
{
inth,j=1,n=0,num;
chark[20];
FILE*fp;
Friendsy;
printf("\t1、按号码查找你所需要修改的原始资料\n");
printf("\t2、按姓名查找你所需要修改的原始资料\n");
printf("请选择...........\n");
scanf("%d",&h);
if(h==1)
{
printf("\t请输入查找你的号码!
\n");
while(j==1)
{
scanf("%d",&num);
fp=fopen("e:
\\通讯录.txt","rb");
while(!
feof(fp))
{
c++;
fread(&y,sizeof(y),1,fp);
if(num==y.sMovtel)
{
change();
break;
}
}
if(num!
=y
.sMovtel)
{
printf("你输入的号码有误!
!
!
\n请重新输入\n");
j=1;
}
fclose(fp);
}
}
if(h==2)
{
printf("\t请输入你查找的姓名!
\n");
while(j==1)
{
c++;
scanf("%s",k);
fp=fopen("e:
\\通讯录.txt","rb");
while(!
feof(fp))
{
fread(&y,sizeof(y),1,fp);
if(strcmp(k,y.sName)==0)
{
change();
break;
}
}
if(strcmp(k,y.sName)!
=0)
{
printf("你输入的姓名有误!
!
!
\n请重新输入\n");
j=1;
}
fclose(fp);
}
}
}
/*
删除
*/
voidsdele()
{
inth,j=1,n=0,num;
chark[20];
FILE*fp;
Friendsy;
printf("\t1、按号码查找你所需要修改的原始资料\n");
printf("\t2、按姓名查找你所需要修改的原始资料\n");
printf("请选择...........\n");
scanf("%d",&h);
if(h==1)
{
printf("\t请输入查找你的号码!
\n");
while(j==1)
{
scanf("%d",&num);
fp=fopen("e:
\\通讯录.txt","rb");
while(!
feof(fp))
{
fread(&y,sizeof(y),1,fp);
if(num==y.sMovtel)
{
fugai();
break;
}
}
if(num!
=y.sMovtel)
{
printf("你输入的号码有误!
!
!
\n请重新输入\n");
j=1;
}
fclose(fp);
}
}
if(h==2)
{
printf("\t请输入你查找的姓名!
\n");
while(j==1)
{
scanf("%s",k);
fp=fopen("e:
\\通讯录.txt","rb");
while(!
feof(fp))
{
fread(&y,sizeof(y),1,fp);
if(strcmp(k,y.sName)==0)
{
fugai();
break;
}
}
if(strcmp(k,y.sName)!
=0)
{
printf("你输入的姓名有误!
!
!
\n请重新输入\n");
j=1;
}
fclose(fp);
}
}
}
voidchange()/*用于修改*/
{
intf,j;
FILE*fp;
Friendsz;
j=c*133;
printf("你要修改的内容:
\n");
printf("\t1、姓名\n\t2、手机号\n\t3、固定电话号码\n");
printf("\t4、电子信箱\n\t5、家庭住址、\n\t6、分类\n");
printf("请选择...........\n");
scanf("%d",&f);
printf("输入你的新信息!
\n");
switch(f)
{
case1:
fp=fopen("e:
\\通讯录.txt","wb");
fread(&z,sizeof(z),1,fp);
fseek(fp,j,SEEK_SET);
scanf("%s",z.sName);
fwrite(&z.sName,sizeof(z.sName),1,fp);
fclose(fp);
output(&z);
break;
fclose(fp);
case2:
fp=fopen("e:
\\通讯录.txt","rb");
fread(&z,sizeof(z),1,fp);
fseek(fp,(j+31),SEEK_SET);
scanf("%d",&z.sMovtel);
fwrite(&z.sMovtel,sizeof(z.sMovtel),1,fp);
fclose(fp);
break;
case3:
fp=fopen("e:
\\通讯录.txt","rb");
fread(&z,sizeof(z),1,fp);
fseek(fp,(j+35),SEEK_SET);
scanf("%d",&z.tel);
fwrite(&z.tel,sizeof(z.tel),1,fp);
fclose(fp);
case4:
fp=fopen("e:
\\通讯录.txt","rb");
fread(&z,sizeof(z),1,fp);
fseek(fp,(j+73),SEEK_SET);
scanf("%s",z.Emaile);
fwrite(&z.Emaile,sizeof(z.Emaile),1,fp);
fclose(fp);
break;
case5:
fp=fopen("e:
\\通讯录.txt","rb");
fread(&z,sizeof(z),1,fp);
fseek(fp,(j+69),SEEK_SET);
scanf("%d",&z.home);
fwrite(&z.home,sizeof(z.home),1,fp);
fclose(fp);
break;
case6:
fp=fopen("e:
\\通讯录.txt","rb");
fread(&z,sizeof(z),1,fp);
fseek(fp,(j+103),SEEK_SET);
scanf("%d",&z.assort);
fwrite(&z.assort,sizeof(z.assort),1,fp);
fclose(fp);
break;
}
}
voidinput(Friends*p)/*输入*/
{
printf("请输入姓名:
\n");
scanf("%s",p->sName);
printf("请输入手机号码:
\n");