第一篇:如何编写一个高效的国税系统通讯录数据库?(定稿)
如何编写一个高效的国税系统通讯录数据库?
为某国税局开发一综合性网站,需要建立一个庞大的国税系统通讯录数据库,从各省、市到每名具体工作人员,项目较多,该如何设计各表呢?
数据库的表设计要本着快捷高效、维护方便的原则,我们建议设计九个表,将单位部分和工作人员部分分开管理,然后再通过其它信息部分将两部分结合起来。各表结构如下,供参考:
1、省(市)份表
create table province(provid tinyint not null identity(1,1),--省(市)编号
provname varchar(20)not null,--省(市)名
constraint pk_province primary key clustered(provid))
2、城市表
create table city(cityid smallint not null identity(1,1),--城市编号
cityname varchar(30)not null,--城市名
provid tinyint not null,--隶属省(市)编号
constraint pk_city primary key clustered(cityid))
索引:
create index city_provid on city(provid)
create index city_cityname on city(cityname)
3、单位级别
create table kind(kindid tinyint not null identity(1,1),--级别编号
kindname varchar(40)not null,--级别名称
constraint pk_kind primary key clustered(kindid))
初始值:
insert into kind(kindname)values('省局')
insert into kind(kindname)values('市地局')
insert into kind(kindname)values('区县局')
insert into kind(kindname)values('基层分局')
4、国税局
create table ntax(ntaxid int not null identity(1,1),--国税局编号
ntaxname varchar(60)not null,--国税局名称
postcode varchar(6)null,--邮政编码
cityid smallint not null,--城市编号
kindid tinyint not null,--国税局类别
county varchar(20)null,--地市名
constraint pk_ntax primary key clustered(ntaxid))
索引:
create index ntax_ntaxname on ntax(ntaxname)
create index ntax_cityid on ntax(cityid)
5、科室(分局、中心)
create table depart(departid int not null identity(1,1),--科室(分局、中心)编号departname varchar(20)not null,--科室(分局、中心)名称ntaxid int not null,--国税局编号
ntaxcomp char(4)not null--(税务、事业、行政)编制constraint pk_depart primary key clustered(departid))
索引:
create index depart_ntaxid on depart(ntaxid)
create index depart_ntaxcomp on depart(ntaxcomp)
6、工作人员
create table member(memberid varchar(15)not null,--登录帐号
membername varchar(10)not null,--真实姓名
nickname varchar(10)not null,--昵称
password varchar(11)not null,--密码
birthday varchar(10)null,--生日
question varchar(20)not null,--提示问题
answer varchar(20)not null,--提示答案
address varchar(100)null,--通信地址
workunit varchar(100)null,--工作单位
telephone varchar(30)null,--办公电话
mobilenumber varchar(30)null,--手机号码
email varchar(50)null,--E-mail地址
QQ varchar(50)null,--QQ号
other text null,--其它信息(备注)loginnum smallint default 0,--来访次数
constraint pk_member primary key clustered(memberid))
索引:
create index member_membername on member(membername)
7、职务
create table mem_kind(assignid tinyint not null identity(1,1),--职务编号
assignname varchar(30)not null,--职务名称
constraint pk_mem_kind primary key clustered(assignid))
初始值:
insert into mem_kind(assignname)values('正处级')
insert into mem_kind(assignname)values('副处级')
insert into mem_kind(assignname)values('科级')
insert into mem_kind(assignname)values('副科级')
insert into mem_kind(assignname)values('科员')
insert into mem_kind(assignname)values('办事员')
8、其它信息
create table mem_depart(memberid varchar(15)not null,--人员编号
departid int not null,--科室(分局、中心)编号assignid tinyint not null,--职务类别
register datetime not null default getdate(),--注册时间
constraint pk_mem_depart primary key clustered(memberid,departid))
索引:
create index mem_depart_memid on mem_depart(memberid)create index mem_depart_departid on mem_depart(departid)
9、留言簿
create table message(messageid int not null identity(1,1),--信息编号memberid varchar(15)not null,--留言人员targetid varchar(15)not null,--目标人员message varchar(1000)null,--信息内容addtime datetime not null default getdate(),--留言时间looked bit not null default 0,--已经看过constraint pk_message primary key clustered(messageid))
索引:
create index message_memberid on message(memberid)create index message_targetid on message(targetid)
第二篇:学校通讯录管理系统数据库设计
4.2 数据库设计
在本实例中使用的是SQL Server 2000数据库管理系统。数据库服务器安装的位置为本机,数据库名称为communicationserver。下面将介绍数据库分析和设计、数据表的创建、数据表关系图和创建存储过程的内容。
4.2.1 数据库分析和设计
在本节中,将根据上一节系统功能的设计分析创建各数据表的实体E-R关系图,它是数据库设计非常重要的一步,下面用E-R图的形式表示出各实体的属性。
1.用户E-R实体图
用户的实体具有用户ID、密码、姓名、性别、电话、E-mail、用户权限7个属性,ER图如图4-5所示。
姓名用户权限性别电话用户E-mail用户ID图4-5 用户E-R实体图
密码 2.地区E-R实体图
地区的实体具有地区编号、地区名称2个属性,E-R图如图4-6所示。
地区编号地区图4-6 地区E-R实体图
地区名称 3.职务E-R实体图
职务的实体具有职务编号、职务名称2个属性,E-R图如图4-7所示。
职务编号职务图4-7 职务E-R实体图
职务名称 4.学校E-R实体图
学校的实体具有学校名称、学校所在地区、在校学生人数3个属性,可用E-R图表示,如图4-8所示。
学校名称学校在校学生人数学校编号学校所在地区
图4-8 学校E-R实体图
5.通讯录E-R实体图
通讯录的实体具有联系人姓名、地址、联系电话、所属职务、所在学校、所在单位、所属地区7个属性,E-R图如图4-9所示。
联系人姓名联系电话所在单位通讯录所在学校图4-9 通讯录E-R实体图
所属地区地址所属职务
4.2.2 数据表的创建
在上面一节中讲解了实体的E-R图,本节中将根据E-R图的内容,创建企业信息管理系统中的各数据表,在此系统中共涉及到5个数据表的应用,分别为如下。
1、字段采用camel 风格定义
2、用不同颜色区分字段 主键:蓝色 外键:白色
既是主键又是外键:淡蓝色 普通字段:青绿 1.用户信息表
用户信息表(Users)用于存放校园通讯录信息管理系统中所有系统管理用户的信息,用户管理是每个管理系统中必不可少的,也是比较重要的一部分,本系统中进行了较详细的设计,表中各个字段的数据类型、大小以及简短描述如表4-1所示。
表4-1 用户信息表 TB_Users 字段名称 sUserID sUserName sUserPassword sUserSex sUserEmail sUserPhone sUserPurview 2.地区信息表
地区信息表(Client)用于存放校园通讯录信息管理系统中所有地区的信息,地区信息的管理是系统中比较重要的内容,地区的名称是其中的关键信息,表中各个字段的数据类型、大小以及简短描述如表4-2所示。
表4-2 地区信息表
TB_Area 字段名称 sAreaID sAreaName 3.职务信息表
职务信息表(Compact)用于存放校园通讯录信息管理系统中所有职务的信息,职务信息的管理是系统中比较重要的内容,职务的名称是其中的关键信息,表中各个字段的数据类型、大小以及简短描述如表4-3所示。
表4-3 职务信息表
TB_Duty
字段名称 sDutyID sDutyName
字段类型 varchar(20)varchar(50)
字段描述 职务编号[PK] 职务名称
字段类型 varchar(20)varchar(50)
字段描述 地区编号[PK] 地区名称
字段类型 varchar(10)varchar(20)varchar(10)char(2)varchar(20)varchar(20)char(1)
字段描述 用户ID [PK] 用户姓名
记录用户登入本系统时的用户密码
用户性别 用户E-mail 用户的联系电话 用户权限 4.学校信息表
学校信息表(Com_detail)用于存放校园通讯录信息管理系统中所有学校的信息,学校信息的管理是系统中比较重要的内容,学校名称是其中的关键信息,表中各个字段的数据类型、大小以及简短描述如表4-4所示。
表4-4 学校信息表
TB_School 字段名称 sSchoolID sSchoolName iStudentNum sAreaID_FK 5.通讯录信息表
通讯录信息表(product)用于存放校园通讯录信息管理系统中所有通讯录的信息,通讯录信息的管理是系统中比较重要的内容,联系电话是其中的关键信息,表中各个字段的数据类型、大小以及简短描述如表4-5所示。
表4-5 通讯录信息表
TB_AddrList
字段类型 varchar(20)varchar(50)int varchar(20)
字段描述 学校编号[PK] 学校名称 学校人数 地区编号[FK] 字段名称 iAddrID sLinkName sAddress sLinkPhone sUnitName sSchoolID_FK sDutyID_FK sAreaID_FK
字段类型 int varchar(50)varchar(20)varchar(20)varchar(50)varchar(20)varchar(20)varchar(20)
字段描述
通讯录编号(自动编号)[PK] 联系人姓名 地址 联系电话 工作单位 学校编号[FK] 职务编号[FK] 地区编号[PK] 4.2.3 创建视图
学校信息视图表V_SchoolInfo 字段名称 sSchoolName sAreaName
字段类型 varchar(50)varchar(50)
字段描述 学校名称 地区名称 sLinkName sDutyName sLinkPhone
create view V_SchoolInfo as
varchar(20)varchar(20)varchar(20)
联系人姓名 职务名称 联系电话
select sSchoolName,sAreaName,sLinkName,sDutyName,sLinkPhone from TB_AddrList,TB_School,TB_Duty,TB_Area where TB_AddrList.sSchoolID_FK=TB_School.sSchoolID
and and TB_AddrList.sDutyID_FK=TB_Duty.sDutyID TB_AddrList.sAreaID_FK=TB_Area.sAreaID 4.2.4 数据表关系图
在学校通讯录信息管理系统中各数据表的关系图,如图4-10所示。在TB_School数据表中,TB_Area数据表的sDutyID_FK字段作为外键。在TB_AddrList数据表中,TB_School数据表的sSchoolID_FK字段、TB_Area数据表中的sAreaID_FK字段和TB_Duty数据表中的sDutyID_FK字段作为外键。
图4-10 数据表关系图 4.2.5 创建存储过程
因为使用存储过程可以给系统带来优化,所以系统将很大程度地使用存储过程,在系统中共应用了10个存储过程,以Add开头的存储过程为系统中信息添加的存储过程,以Update开头的存储过程为系统中信息修改的存储过程,这些存储过程将会在系统程序文件的后台应用中调用,下面将对系统中应用的存储过程进行解释。
1.AddTB _Users存储过程
AddTB _Users存储过程用于向用户信息表中添加新的用户信息。以下代码表示了这一存储过程。CREATE PROCEDURE AddTB_Users @sUserID varchar(10), @sUserName varchar(20), @sUserPassword varchar(10), @sUserSex char(2), @sUserEmail varchar(20), @sUserPhone varchar(20), @sUserPurview char(1)AS
INSERT INTO TB_Users(sUserID, sUserName, sUserPassword, sUserSex, sUserEmail, sUserPhone,sUserPurview)
VALUES(@sUserID, @sUserName, @sUserPassword, @sUserSex, @sUserEmail, @sUserPhone, @sUserPurview)GO 2.Add 存储过程 Add TB_Area存储过程用于往地区信息表中添加新的地区信息。以下代码表示了这一存储过程。
CREATE PROCEDURE AddTB_Area
@sAreaID varchar(20),@sAreaName varchar(50)AS
INSERT INTO TB_Area(sAreaID,sAreaName)
VALUES(@sAreaID,@sAreaName)GO 3.AddTB_Duty存储过程
AddTB_Duty存储过程用于往职务信息表中添加新的职务信息。以下代码表示了这一存储过程。CREATE PROCEDURE AddTB_Duty
@sDutyID varchar(20),@sDutyName varchar(50)AS
INSERT INTO TB_Duty(sDutyID,sDutyName)
VALUES(@sDutyID,@sDutyName)GO 4.AddTB_School存储过程
AddTB_School 该存储过程用于往学校信息表中添加新的学校信息。以下代码表示了这一存储过程。CREATE PROCEDURE AddTB_School
@sSchoolID varchar(20),@sSchoolName varchar(50),@iStudentNum int,@sAreaID_FK varchar(20)AS
INSERT INTO TB_School(sSchoolID,sSchoolName,iStudentNum,sAreaID_FK)
VALUES(@sSchoolID,@sSchoolName,@iStudentNum,@sAreaID_FK)GO 5.AddTB_AddrList存储过程
AddTB_AddrList存储过程用于往通讯录信息表中添加新的通讯录信息。以下代码表示了这一存储过程。CREATE PROCEDURE AddTB_AddrList
@sLinkName varchar(20),@sAddress varchar(50),@sLinkPhone varchar(20),@sUnitName varchar(20),@sSchoolID_FK varchar(20),@sDutyID_FK varchar(20)AS
INSERT INTO TB_AddrList(sLinkName,sAddress,sLinkPhone,sUnitName,sSchoolID_FK,sDutyID_FK)
VALUES(@sLinkName,@sAddress,@sLinkPhone,@sUnitName,@sSchoolID_FK,@sDutyID_FK)GO 6.UpdateTB _Users存储过程
UpdateTB _Users存储过程用于修改用户信息表中,符合条件的用户信息,其中密码信息不可以更新。以下代码表示了这一存储过程。CREATE PROCEDURE UpdateTB_Users
@sUserID varchar(10),@sUserName varchar(20),@sUserSex char(2),@sUserEmail varchar(20),@sUserPhone varchar(20),@sUserPurview char(1)AS
UPDATE TB_Users SET
sUserID =@sUserID,sUserName =@sUserName,sUserSex=@sUserSex,sUserEmail=@sUserEmail,sUserPhone=@sUserPhone,sUserPurview=@sUserPurview WHERE
sUserID =@sUserID GO 7.UpdateTB_Area存储过程
UpdateTB_Area存储过程用于修改地区信息表中的地区信息。以下代码表示了这一存储过程。CREATE PROCEDURE UpdateTB_Area
@sAreaID varchar(20),@sAreaName varchar(50)AS
UPDATE TB_Area SET
sAreaID =@sAreaID,sAreaName =@sAreaName WHERE
sAreaID =@sAreaID GO 8.UpdateTB_Duty存储过程
UpdateTB_Duty存储过程用于修改职务信息表中的职务信息。以下代码表示了这一存储过程。
CREATE PROCEDURE UpdateTB_Duty
@sDutyID varchar(20),@sDutyName varchar(50)AS
UPDATE TB_Duty SET
sDutyID =@sDutyID,sDutyName =@sDutyName WHERE
sDutyID =@sDutyID GO 9.UpdateTB_School存储过程
UpdateTB_School存储过程用于修改学校信息表中的学校信息。以下代码表示了这一存储过程。CREATE PROCEDURE UpdateTB_School
@sSchoolID varchar(20),@sSchoolName varchar(50),@iStudentNum int,@sAreaID_FK varchar(20)AS
UPDATE TB_School SET
sSchoolID =@sSchoolID,sSchoolName =@sSchoolName,iStudentNum =@iStudentNum,sAreaID_FK=@sAreaID_FK WHERE
sSchoolID =@sSchoolID GO 10.UpdateTB_AddrList存储过程
UpdateTB_AddrList存储过程用于修改通讯录信息表中的通讯录信息。以下代码表示了这一存储过程。
CREATE PROCEDURE UpdateTB_AddrList
@iAddrID int,@sLinkName varchar(20),@sAddress varchar(50),@sLinkPhone varchar(20),@sUnitName varchar(20),@sSchoolID_FK varchar(20),@sDutyID_FK varchar(20)AS
UPDATE TB_AddrList SET
sLinkName =@sLinkName,sAddress =@sAddress,sLinkPhone =@sLinkPhone,sUnitName=@sUnitName,sSchoolID_FK=@sSchoolID_FK,sDutyID_FK=@sDutyID_FK WHERE
iAddrID =@iAddrID GO
第三篇:通讯录管理系统
课 程 设 计 任 务 书
题
目
C语言课程设计
系
(部)
专
业
班
级
学生姓名
学
号
06 月
信息科学与电气工程学院
计算机科学与技术
计职141
王雪
140819139 日至
07 月
04 日
共
周 指导教师
院
长
2015 年 6月 23日
一、课程设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++程序设计语言》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握结构化程序设计方法,熟悉面向对象程序设计方法。(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序和修改程序。设计功能
录入联系人信息(包括姓名、电话号码、地址等信息);通讯录管理系统要求实现以下功能:
1、输入每一位联系人记录,将其信息存入文件中。
2、查询所有联系人的信息,并按可选的自定义规则进行排序;
3、记录修改,将修改的记录信息保存于文件中。设计要求
1、设一个通信录由以下几项数据信息构成: 数据项 类型
姓名 字符串
地址 字符串
邮政编码 字符串
电话号码 字符串
试为通信录数据定义类型和定义通信录变量,实现功能:存取、显示、删除记录、查询记录等功能。
2、要求:界面友好,易于操作 总体设计 系统功能模块图:
添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱等后,会提示是否继续添加。
显示:可以以表格形式输出所有通讯录里的记录
删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容 查询:可以选择用姓名、电话、地址三种方式查询
修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改
保存:,输入文件名(带后缀名)后,即可将通讯录信息保存到文件
课程设计名称及内容
课程设计名称:单项选择题标准化考试系统
设计内容:设计并实现一个单项选择题标准化考试系统。该系统可以完成试题录入、试题抽取、自动判卷等功能。
任务和要求
功能要求:
(1)用文件保存试题库。(每个试题包括题干、4个备选答案、标准答案)(2)试题录入:可随时增加试题到试题库中
(3)试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)(4)答题:用户可实现输入自己的答案
(5)自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。
(二)其它要求:
(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)(3)学生可自动增加新功能模块(视情况可另外加分)
主要知识点
l 面向对象程序设计方法
l 界面制作,switch的应用。l 类和对象。l 动态数组(链表)类模板。l 文件的读写。
五、其他
程序设计可在Microsoft VC++6.0、Borland C++ Builder环境下进行。
六、参考资料
【1】《C语言程序设计》,谭浩强编,清华大学出版社,2008年 出版 【2】《C语言程序设计》,吴明发编,北京理工大学出版社,2007年出版 【3】《C语言参考手册》邱仲潘 机械工业出版社,2004年出版
【4】《C语言课程设计案例精编》 姜灵之 清华大学出版社 2008年出版
详细设计(1).通讯录: 主要代码
#include
//结构体 {
};class inter { private: student st[35];char no[13];char name[20];char address[100];char tel_no[12];char post_code[7];char e_mail[40];public: void add(char no[13],char name[20],char address[100],char tel_no[12],char post_code[7],char e_mail[40]);
void del(char name[20]);void find1(char no[13]);void find2(char name[20]);void list1();void list2();int correct(char name[20]);void read();void write();void format();int back(){
cout<<“
返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写):
”;
} void print(int i){
cout<<“学号:”<
};
} cout<<“电话号码:”< inter a;a.format();char select1;cout< 计职141 ” < <<“tt★★★★★★★★★★★★★★★★★★★★★★★★★★” < ※” < 通 迅 录 ※” < ※” < ※” < ※” < ※” < <<“tt ”< <<“ttt选择 :”;cin>>select1; switch(select1){ case '1':cout<<“ (1)添加:”< cout<<“ (2)删除:”< (3)修改:”< 请选择:”< 输入添加的资料:”< char name[20]; char address[100]; char tel_no[12]; char post_code[7]; char e_mail[40]; cout<<“ 输入学号:”< 输入姓名:”< 输入地址:”< 输入电话号码:”< 输入邮编:”< cout<<“ 输入E_mail:”< cout<<“ 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ”; char back_add;cin>>back_add;if(back_add=='R'||back_add=='r')goto top;else goto bottom;break;case '2':cout<<“ 输入要删除人的姓名:”< char name2[20];cin>>name2;a.del(name2); cout<<“ 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ”; char back_del;cin>>back_del;if(back_del=='R'||back_del=='r')goto top;else goto bottom;break;case '3':cout<<“ 输入需要修改人的姓名:”< char name3[20];cin>>name3;if(a.correct(name3)) } goto top;else goto bottom;break;break;case '2':cout<<“ (1)根据姓名查找”< cout<<“ (2)根据学号查找”< 请选择: ”;cin>>select3;switch(select3){ case '1':char name4[20]; cout<<“ 输入姓名: ”;cin>>name4;a.find2(name4); cout<<“ 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ”; char back_f1;cin>>back_f1;if(back_f1=='R'||back_f1=='r')goto top;else goto bottom;break;case '2':char no4[13];cout<<“ 输入学号: ”;cin>>no4; a.find1(no4); cout<<“ 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ”; } break;char back_f2;cin>>back_f2;if(back_f2=='R'||back_f2=='r')goto top;else goto bottom;break;case '3':a.write();cout<<“ 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ”; char back_w;cin>>back_w;if(back_w=='R'||back_w=='r')goto top;else goto bottom;break;case '4':cout<<“ (1)按学号排序:”< cout<<“ (2)按姓名排序:”< 请选择:”;char select4;cin>>select4;switch(select4){ case '1':a.list1(); cout<<“ 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ”; char back;cin>>back;if(back=='R'||back=='r')goto top;else goto bottom;break;case '2':a.list2(); cout<<“ 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ”; } break;char back1;cin>>back1;if(back1=='R'||back1=='r')goto top;else goto bottom;break;case '5':a.read();cout<<“ 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ”; char back_r;cin>>back_r;if(back_r=='R'||back_r=='r') goto top;else goto bottom;break;case '6':cout<<“ 请确认删除所有资料!(Y/N) ”; char select5;cin>>select5;if(select5=='Y'||select5=='y')a.format();cout<<“ 返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): ”; } char back_f;cin>>back_f;if(back_f=='R'||back_f=='r')goto top;else goto bottom;break;bottom:cout<<“ ★★★★★★★★★★★★欢迎使用本软件!★★★★★★★★★★★ ”< void inter::add(char no[13],char name[20],char address[100],char tel_no[12],char post_code[7],char e_mail[40]){ int x=1;for(int i=0;i<35;i++)return 0; } { } if(!strcmp(st[i].no,“0”)){ } if(x==0)break;strcpy(st[i].address,address);strcpy(st[i].e_mail,e_mail);strcpy(st[i].name,name);strcpy(st[i].no,no);strcpy(st[i].post_code,post_code);strcpy(st[i].tel_no,tel_no);x=0;//删除联系人 void inter::del(char name[20]){ int x=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].name,name)){ strcpy(st[i].address,“0”); strcpy(st[i].e_mail,“0”);strcpy(st[i].name,“0”);strcpy(st[i].no,“0”);strcpy(st[i].post_code,“0”);strcpy(st[i].tel_no,“0”); } } } else x=0;if(x==0)cout<<“ error:输入姓名错误!”< int inter::correct(char name[30]){ int x;for(int i=0;i<35;i++){ } char select;cout<<“ (1)修改姓名:”< (2)修改学号:”< (3)修改地址:”< (4)修改邮编:”< (5)修改电话号码:”< (6)修改E_MAIL:”< 请选择:”;cin>>select;switch(select){ case '1':cout<<“ 输入要修改的姓名:”;char name1[30];if(!strcmp(st[i].name,name))x=i; cin>>name1;strcpy(st[x].name,name1);cout<<“ 修改成功!”< 输入要修改的学号:”; char no1[13];cin>>no1;strcpy(st[i].no,no1);cout<<“ 修改成功!”< 输入要修改的地址:”; char address1[100];cin>>address1;strcpy(st[x].address,address1);cout<<“ 修改成功!”< 输入要修改的邮编:”; char post_code1[7];cin>>post_code1;strcpy(st[x].post_code,post_code1);cout<<“ 修改成功!”< 输入要修改的电话号码:”;char tel_no1[12]; cin>>tel_no1;strcpy(st[x].tel_no,tel_no1);cout<<“ 修改成功!”< 输入要修改的E_MAIL:”; char e_mail1[40]; cin>>e_mail1; strcpy(st[x].e_mail,e_mail1); cout<<“ 修改成功!”< return back(); break;} } //按学号查询联系人 void inter::find1(char no[13]){ int x,y=1,z=1;for(int i=0;i<35;i++){ if(!strcmp(st[i].no,no)) { x=i; z=0; } else y=0; if(z==0)break; } if(y==0)cout<<“ 输入的学号查找不到!!”< print(x);} //按姓名查询联系人 void inter::find2(char name[20]){ } //读取文件 void inter::read(){ int x,y=1,z=1;for(int i=0;i<35;i++){ } if(y==0)cout<<“ 输入的姓名查找不到!!”< } else y=0;if(z==0)break;x=i;z=0; print(x); char name1[20];cout<<“ 输入你要导入的文件名: ”;cin>>name1;strcat(name1,“.txt”);ifstream file(name1);char line[120];char no[120];char name[120];char address[120];char post_code[120];char tel_no[120];char e_mail[120];int time=0;file.getline(line,120);while(!file.eof()){ for(int k=0;k<35;k++){ if(time==0){ strcpy(no,line);time=1;for(int i=0;i<120;i++){ if(no[i]==':'){ i++;for(int j=0;j<13;j++) } } { } st[k].no[j]=no[i];i++;file.getline(line,120,'n');} if(time==1){ } if(time== 2){ strcpy(name,line);time=2; for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(name[i]==':'){ } i++;for(int j=0;j<20;j++){ } st[k].name[j]=name[i];i++; } strcpy(address,line);time=3;for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(address[i]==':'){ } i++;for(int j=0;j<100;j++){ } st[k].address[j]=address[i];i++;if(time==3){ strcpy(tel_no,line);time=4;for(int i=0;i<120;i++){ if(tel_no[i]==':'){ i++;for(int j=0;j<12;j++){ st[k].tel_no[j]=tel_no[i]; } } } } i++;file.getline(line,120,'n'); if(time==4){ } if(time==5){ strcpy(e_mail,line);strcpy(post_code,line);time=5;for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(post_code[i]==':'){ } i++;for(int j=0;j<7;j++){ } st[k].post_code[j]=post_code[i];i++; } } } } time=0;for(int i=0;i<120;i++){ } file.getline(line,120,'n');if(e_mail[i]==':'){ } i++;for(int j=0;j<40;j++){ } st[k].e_mail[j]=e_mail[i];i++; file.close();//写入文件 void inter::write(){ char name[20];cout<<“ 输入要保存的文件名 ”;cin>>name;strcat(name,“.txt”);ofstream savefile(name);for(int i=0;i<35;i++) } { } savefile.close();savefile << “学号:”< savefile << “姓名:”< savefile << “地址:”< savefile << “电话号码:”< savefile << “邮编:”< savefile << “E_MAIL:”< strcpy(no,st[j].no);strcpy(st[j].no,st[j+1].no);for(int i=0;i<34;i++){ for(int j=0;j<35-i;j++){ if(strcmp(st[j].no,st[j+1].no)>0){ char no[13]; char name[20]; char address[100]; char tel_no[12]; char post_code[7]; char e_mail[40]; strcpy(st[j+1].no,no); strcpy(name,st[j].name);strcpy(st[j].name,st[j+1].name);strcpy(st[j+1].name,name); strcpy(address,st[j].address); } for(int k=0;k<35;k++){ int x=0;if(strcmp(st[k].no,“0”)) } } strcpy(st[j].address,st[j+1].address);strcpy(st[j+1].address,address); strcpy(tel_no,st[j].tel_no);strcpy(st[j].tel_no,st[j+1].tel_no);strcpy(st[j+1].tel_no,tel_no); strcpy(post_code,st[j].post_code);strcpy(st[j].post_code,st[j+1].post_code);strcpy(st[j+1].post_code,post_code); strcpy(e_mail,st[j].e_mail);strcpy(st[j].e_mail,st[j+1].e_mail);strcpy(st[j+1].e_mail,e_mail); { } if(x==1){ cout< } } } //按姓名排序 void inter::list2(){ for(int i=0;i<34;i++){ for(int j=0;j<35-i;j++){ if(strcmp(st[j].name,st[j+1].name)>0){ char no[13]; char name[20]; char address[100]; char tel_no[12]; char post_code[7]; char e_mail[40]; strcpy(no,st[j].no);strcpy(st[j].no,st[j+1].no);strcpy(st[j+1].no,no); strcpy(name,st[j].name);strcpy(st[j].name,st[j+1].name);strcpy(st[j+1].name,name); strcpy(address,st[j].address); } for(int k=0;k<35;k++){ } } strcpy(st[j].address,st[j+1].address);strcpy(st[j+1].address,address); strcpy(tel_no,st[j].tel_no);strcpy(st[j].tel_no,st[j+1].tel_no);strcpy(st[j+1].tel_no,tel_no); strcpy(post_code,st[j].post_code);strcpy(st[j].post_code,st[j+1].post_code);strcpy(st[j+1].post_code,post_code); strcpy(e_mail,st[j].e_mail);strcpy(st[j].e_mail,st[j+1].e_mail);strcpy(st[j+1].e_mail,e_mail); } } int x=0;if(strcmp(st[k].no,“0”)){ } if(x==1){ } cout< void inter::format(){ } for(int i=0;i<35;i++){ } strcpy(st[i].address,“0”);strcpy(st[i].e_mail,“0”);strcpy(st[i].name,“0”);strcpy(st[i].no,“0”);strcpy(st[i].post_code,“0”);strcpy(st[i].tel_no,“0”); (2).工作流程图: 1.通讯录主界面 2.添加:添加通讯录记录 3.显示:查询通讯录记录 4.删除:删除通讯录记录 5.修改:修改通讯录记录 小结(收获和建议)这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验,面对许多不懂得知识,通过他人的帮助,以及参考他人的成果,自己动手尝试,修改等,才完成。这个课程设计,花费了我近两个星期的时间,这也是因为书本不熟悉。通过这次设计,使我对《C语言》这门课程有了更深一步的了解。它不仅是计算机程序设计的重要理论技术基础,也在我们电子与信息专业的学习中占据着十分重要的地位。同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。利用计算机来编写程序,也让我感受到了编程的乐趣,极大的激发了我的兴趣。 摘 要 为了人们对他人信息的记忆方便而设计,开发的一套“通讯录管理系统“软件。通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,针对c语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。得到软件工程的综合训练,提高解决实际问题的能力。 关键字:信息;管理;实用 Abstract Designed for people to others the memory of information convenient, developed a set of “mail list management system” software.Through the design process of this subject, students can be structured programming ideas, deepen our understanding of the advanced language basic language elements and control the understanding of the structure, conduct training for emphasis and difficulty in C language, independently complete the program design has a certain work tasks, while emphasizing the good programming style.Comprehensive training in software engineering, improving the ability to solve practical problems.Keywords: Information;management;practical 目 录 概述.........................................................................1 1.1设计目的..................................................................1 1.2设计要求..................................................................1 1.3系统功能需求分析..........................................................2 2 总体设计.....................................................................3 2.1总体功能模块图............................................................3 2.2程序的数据设计............................................................4 3详细设计.....................................................................5 3.1功能及工作流程图..........................................................5 3.2源程序代码................................................................8 4调试分析....................................................................19 4.1测试.....................................................................19 4.2问题思考与调试:.........................................................27 5总结........................................................................28 参考文献......................................................................29 致 谢........................................................................27 概述 1.1设计目的 随着信息社会的高速发展,人与人之间的联系越来越频繁,通讯方式越来越多样化,如何保证与朋友、同学、同事、领导、亲戚等之间的联系,并能方便快捷的查找、记录、修改其相关通讯信息。仅靠以前单独的手工记录已远远不能满足当前的需要。 开发一个通讯录管理系统,借助计算机可以方便、快捷、灵活的管理个人的朋友及相关人员的通讯信息,了解友人相关信息,帮助与友人保持联络。 所以设计一个通讯录管理系统管理各人的通讯信息是是非必要的。 设计“通讯录管理系统”使其具有数据插入、修改、删除、显示和查询等功能。(1)数据包括:人名、工作单位、电话号码和E-mail地址。(2)可对记录中的姓名和电话号码进行修改。(3)可增加或删除记录。(4)可显示所有保存的记录。(5)可按人名或电话号码进行查询。 1.2设计要求 建立通讯录信息,信息至少包含姓名、住址、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、E-mail、QQ等。 该系统提供添加、删除、修改和查找功能,其中按姓名方式删除、修改,按姓名、单位、分类方式查找。 将通讯录保存在文件中。能够输出通讯录中的信息。 1.3系统功能需求分析 主要包含一下多种功能: 添加:添加通讯录记录 显示:显示通讯录记录 删除:删除通讯录记录 查询:查询通讯录记录 修改:修改通讯录记录 保存:将信息保存到文件 本系统为通讯录管理系统,可由用户自由添加,删除和修改信息,还可以将通讯录信息导出到文本文档,极大的方便了用户的使用。 总体设计 思路:我们首先设计出了主函数,然后根据去要实现的功能分别设计录入联系人信息、浏览、查询、修改、删除功能的子函数。删除函数的设计是首先从文件内找到要删除的人,然后通过写一个实现删除目的的FOR循环实现删除。修改也大体和删除相同,添加函数在设计时通过申请一片空间,然后通过指针将需要添加的信息添加进去,从而实现添加功能。 2.1总体功能模块图 图2.1 总体功能模块图 添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。 显示:可以以表格形式输出所有通讯录里的记录。 删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容。查询:可以选择用姓名、电话、地址三种方式查询。 修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改。 保存:输入文件名(带后缀名)后,即可将通讯录信息保存到文件。运行所需环境:win7及以下各版本windows,visual C++6.0。2.2程序的数据设计 该系统用下面六个功能模块编写,每个模块执行不同的功能,体现了模块化设计的思想。下面六个模块都是利用C语言文件,向文件中追加数据、修改数据、查询数据和除数据。 创建:用fopen()建立一个文本文件,然后用fprintf()向其中输入数据(例如,向文件中输入“姓名”,“地址”等),并对文件进行命名。 添加:可以添加通讯录记录,利用C语言文件,向文件中按顺序输入姓名、住址、单位、固定电话、手机号码、分类(如同事、朋友、同学、家人等)、E-mail、QQ,再用fclose()函数关闭并保存文件。 输出:也是用通过循环依次输出文件中的数据,即输出所有通讯录里的记录。删除:输入你要删除的人的姓名后,系统会自动删除他(她)的记录,在删除通过switch语句满足提示你确认删除的功能,只有等你确认删除后才会删除。查找:为了满足用户的实际需求,设计了三种查询方式,可以用姓名、单位、分类三种方式查找通讯录记录。这里用到strcmp()函数,通过比较字符串是否相同来判别是否找到相关信息,找到后,就把文件中的数据赋给对应的变量,再把变量所带的值输出到屏幕上。 修改:输入你要修改的那个人的姓名后,系统会查找该通讯录文件(此时用发ftell()函数来跟踪文件指针的指向地址,找到个人的记录后,会显示他(她)的记录,然后通过fseek()函数来找到修改处的地址,然后用户再依次输入他(她)的相关信息来替代以前的记录。 保存:用到fclose()函数,每次操作成功后会自动保存到指定的文件中。 3详细设计 3.1功能及工作流程图 ①添加:添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。 图3.1(1)添加流程图 ②显示:以表格形式输出所有通讯录里的 图3.1(2)显示流程图 ③删除::输入欲删除的那个人的名字后,会自动删除他(她)的记录内容。 图3.1(3)删除流程图 ④查询:可以选择用姓名、电话、地址三种方式查询。 图3.1(4)查询流程图 ⑤修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改。 图3.1(5)修改流程图 3.2源程序代码 #include typedef struct Person pe[80]; int menu_select() { char c;do{ system(“cls”); printf(“tt *****通讯录***** n”); printf(“tt┌───────┐n”); printf(“tt│ 1.添加记录 │n”);printf(“tt│ 2.显示记录 │n”);printf(“tt│ 3.删除记录 │n”);printf(“tt│ 4.查询记录 │n”);printf(“tt│ 5.修改记录 │n”);{ char score; /*编号*/ char name[10]; /*姓名*/ char num[15]; /*号码*/ char email[20];char age[8];char adds[20]; /*邮箱*/ /*年龄*/ /*住址*/ }Person; } printf(“tt│ 6.保存记录 │n”);printf(“tt│ 0.退出程序 │n”);printf(“tt└───────┘n”);printf(“tt请您选择(0-6):”);c=getchar(); }while(c<'0'||c>'6');return(c-'0'); int Input(Person per[],int n){ gets(x); 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].age);printf(“t电话号码:”);scanf(“t%s”,per[n+i].num);printf(“t通讯住址:”);scanf(“t%s”,per[n+i].adds);printf(“t电子邮箱:”);scanf(“t%s”,per[n+i].email); } } printf(“nt是否继续添加?(Y/N)”);scanf(“t%c”,&sign);i++; return(n+i); void Display(Person per[],int n) { int i; printf(“--------n”); /*格式*/ printf(“%-5d%-8s%-6s%-13s%-15s%-15sn”,per[i-1].score,per[i-1].name,per[i-1].age,perprintf(“编号 姓名 年龄 电话号码 通讯地址 电子邮箱n”);printf(“--------n”); for(i=1;i { [i-1].num,per[i-1].adds,per[i-1].email); } printf(“--------n”);system(“pause”);if(i>1&&i%10==0) { } printf(“t----n”);printf(“t”);system(“pause”); printf(“t----n”);} 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 } for(j=i;j } printf(“ttt已经成功删除!n”);return(n-1);strcpy(per[j].num,per[j+1].num);strcpy(per[j].name,per[j+1].name);strcpy(per[j].age,per[j+1].age);strcpy(per[j].adds,per[j+1].adds);strcpy(per[j].email,per[j+1].email);per[j].score=per[j+1].score;printf(“t通讯录中没有此人!n”);return(n);void Query_a_record(Person per[],int n){ int m;printf(“tn请选择查询方式: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) { if(m==1){ char s[20];int i=0; printf(“t请输入想查询的姓名:”);scanf(“t%s”,s); while(strcmp(per[i].name,s)!=0&&i } printf(“输入错误,请重新选择:”);scanf(“%d”,&m); };} return; printf(“t此人编号: %dn”,per[i].score);printf(“t此人年龄: %sn”,per[i].age);printf(“t电话号码: %sn”,per[i].num);printf(“t通讯地址: %sn”,per[i].adds);printf(“t电子邮箱: %sn”,per[i].email);if(m==2){ char s[20];int i=0; printf(“t请输入想查询的电话:”);scanf(“t%s”,s); while(strcmp(per[i].num,s)!=0&&i };} printf(“t此人编号: %dn”,per[i].score);printf(“t此人姓名: %sn”,per[i].name);printf(“t此人年龄: %sn”,per[i].age);printf(“t通讯地址: %sn”,per[i].adds);printf(“t电子邮箱: %sn”,per[i].email); } if(m==3){ };char s[20];int i=0; printf(“t请输入想查询的地址:”);scanf(“t%s”,s); while(strcmp(per[i].adds,s)!=0&&i } printf(“t此人编号: %dn”,per[i].score);printf(“t此人姓名: %sn”,per[i].name);printf(“t此人年龄: %sn”,per[i].age);printf(“t电话号码: %sn”,per[i].num);printf(“t电子邮箱: %sn”,per[i].email);printf(“t通讯录中没有此人!n”);return; void Change(Person per[],int n){ char s[20];int i=0; printf(“t请输入想修改的记录中的名字:”);scanf(“%s”,s); while(strcmp(per[i].name,s)!=0&&i 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].age);printf(“t电话号码:”); scanf(“t%s”,per[i].num); printf(“t通讯住址:”); scanf(“t%s”,per[i].adds);printf(“t电子邮箱:”);scanf(“t%s”,per[i].email);printf(“t修改成功!”);} void WritetoText(Person per[],int n) { int i=0; FILE *fp; char filename[20]; printf(“t保存到文件n”); printf(“t请输入所保存的文件名:”); scanf(“t%s”,filename); if((fp=fopen(filename,“w”))==NULL) /*定义文件指针*/ /*定义文件名*/ /*输入文件名*/ { } fprintf(fp,“****************************************** 通 讯 录printf(”t无法打开文件n“);system(”pause“);return; ******************************************n”);fprintf(fp,“编号 姓名 年龄 电话号码 通讯地址 电子邮箱n”);; fprintf(fp,“%-3dt%-6st%-3st%-13st%-20st%-20sn”,per[i].score,per[i].name,per[i].agwhile(i ;fprintf(fp,“***************************************共有%d 条记录 } fprintf(fp,”----------------------------n“)i++; ****************************************n”,n); } void main() /*主函数*/ { int n=0;fclose(fp); /*关闭文件*/ printf(“保存成功!n”);for(;;){ switch(menu_select()) { case 1: printf(“nt添加记录到通讯录n”); n=Input(pe,n);break; case 2: printf(“nttt 通讯录记录表n”);Display(pe,n); break; case 3: printf(“nt从通讯录中删除记录n”);n=Delete_a_record(pe,n); printf(“t”); system(“pause”);break; case 4: printf(“nt在通讯录中查找记录n”);Query_a_record(pe,n); printf(“t”); system(“pause”); break; case 5: /*添加记录*/ /*显示记录*/ /*删除记录*/ /*查找记录*/ printf(“nt修改通讯录中的记录n”); Change(pe,n); printf(“t”); system(“pause”); break; case 6: printf(“nt保存功能n”); WritetoText(pe,n); printf(“t”); system(“pause”); break; case 0: printf(“ntt谢谢使用,再见!n”); printf(“ntt”); system(“pause”); exit(0); } } } /*修改数据*/ /*保存数据*/ /*结束程序*/ 4调试分析 调试的意义和目的:在管理信息系统的开发过程中,面对着错综复杂的各种问题,人的主观认识不可能完全符合客观现实,开发人员之间的思想交流也不可能十分完善。所以,在管理信息系统开发周期的各个阶段都不可避免地会出现差错。开发人员应力求在每个阶段结束之前进行认真、严格的技术审查,尽可能早的发现并纠正错误,否则等到系统投入运行后再回头来改正错误将在人力、物力上造成很大的浪费,有时甚至导致整个系统的瘫痪。然而,经验表明,单凭审查并不能发现全部差错,加之在程序设计阶段也不可避免还会产生新的错误,所以,对系统进行调试是不可缺少的,是保证系统质量的关键步骤。统计资料表明,对于一些较大规模的系统来说,系统调试的工作量往往占程序系统编制开发总工作量的40%以上。 调试的目的在于发现其中的错误并及时纠正,所以在调试时应想方设法使程序的各个部分都投入运行,力图找出所有错误。错误多少与程序质量有关。即使这样,调试通过也不能证明系统绝对无误,只不过说明各模块、各子系统的功能和运行情况正常,相互之间连接无误,系统交付用户使用以后,在系统的维护阶段仍有可能发现少量错误并进行纠正,这也是正常的。 4.1测试 1).显示的主菜单界面: 图4.1(1)主菜单界面 2).添加界面: 图4.1(2)添加界面 3).显示界面: 图4.1(3)显示界面 4).删除界面: 图4.1(4)删除前界面 删除后,通讯录里的显示记录: 图(4)删除后界面 5).查询界面:以姓名查询方式为例: 图4.1(5)查询界面 6).修改界面: 图4.1(6)修改前界面 修改后,通讯录里的显示记录: 图4.1(6)修改后界面 7).保存界面: 图4.1(7)保存界面 通讯录.txt 文件截图: 图4.1文件截图 4.2问题思考与调试: 1.当我在进行删除、查询、修改、保存等功能时,以查询为例,输入名字按回车后,虽然会显示该人的所有记录,但是显示后,它马上自动消失了,还没来得及等我看内容。因此,向别人请教后,在一些地方加入了system(“pause”);这个语言,用来对某项操作完成后进行暂停。 2.现在这个程序的界面个人感觉很清爽。但在最初,每次进行一项操作,运行窗口里的内容会一直保留着,感觉很杂乱,如下图(添加后,进行显示操作): 图4.2分析图 之后,我去网上寻求解决办法,知道可以使用system(“cls”);这一语句可以解决这个问题,最后,修改成功。5总结 这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。自己动手,自己发现和解决问题。发现了自己的许多不足。平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。我相信在以后的学习能够解决好它们。但是,收获还是不小的,我不仅对C的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。 当我选择通讯录这个题目时,一开始想运用大量链表及指针来完成,但是在慢慢琢磨之后,觉得这个不一定要用链表,于是改变了编程思路。当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。另外一点要说的就是这个程序用了很多的循环,因此对于循环的控制要十分小心,有时while和do-while的区别也是十分重要的。 还有一点体会就是,书上和老师教的内容是有限的,我们需要不断地靠自己去学习,向他人请教,了解和掌握更多的知识,这样我们才能编出更好的C程序。 总体来说,这次C语言程序设计实验还是比较成功的,虽然最终程序还存在一些不足,但能取得这样的成绩我还是比较高兴的。 最后,要感谢学校为我们提供这次实验机会,也要感谢老师的教导和好心人对我的帮助与支持。 参考文献 [1]谭浩强,张基温。C语言程序设计教程。第三版。北京:高等教育出版社,2006 [2]谭浩强,张基温。C语言习题集与上机指导。第三版。北京:高等教育出版社,2006 [3]谭浩强。C程序设计(第三版)。北京:清华大学,2005 [4]谭浩强。C程序设计(第二版)。北京:清华大学,1999 [5]林建秋,韩静萍,等.C语言程序设计【M】.电子工业出版社,2004.[6]谭浩强.C语言程序设计【M】.清华大学出版社,2006.[7]黄维通.C语言设计教程.清华大学出版社,2005.[8]王成瑞.C语言程序设计.中国水利水电出版社,2005.[9]张基温.C语言程序设计案例教程.清华大学出版社,2004.[10]苏小红,陈惠鹏.C语言大学实用教程【M】.电子工业出版社,2007.致 谢 在这里我要感谢杨书鸿老师,她对我进行了无私的指导和帮助,不厌其烦的帮助进行论文的修改和改进。另外,在校图书馆查找资料的时候,图书馆的老师也给我提供了很多方面的支持与帮助。在此向帮助和指导过我的各位老师表示最中心的感谢!感谢这篇论文所涉及到的各位学者,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作。感谢我的同学和朋友,在我写论文的过程中给予我很多素材,还在论文的撰写和排版等过程中提供热情的帮助。由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和学友批评和指正! 通讯录管理系统的项目总结 信息1011-2010822109-田文静 通过这一阶段的学习,我们对这个通讯录管理系统有了一定的了解。我们组的项目设计主要是面向通讯录管理部分,首先我们做的是通讯录的登录界面,其次还有添加好友信息、修改好友信息、修改密码、注册新会员等界面。在课程设计中,程序设计主要的是采用C#语言,数据的存储采用文本存储的方式.程序设计主要是由我们大二第一学期的桌面软件开发转变为web项目开发.程序设计后通过运行调试,基本上可以实现解决班级通讯管理问题.在进行通讯录管理系统开发之前我们所涉及到的是一些基本控件的使用.例如在lable控件中显示日期和时间:lable.Text=DateTime.Now.ToString;除了控件以外还学习了一些控件的具体属性.而后就是数据库,数据库设计的任务是确定系统所需的数据库,数据库是表的集合,通常一个系统只需要一个数据库,设计的任务是根据需求分析,确定数据库所包含的表及字段,表间的关系,然后具体确定表的结构,包括字段名,字段类型及宽度,需要的索引.在此基础上我们就进入了通讯录管理系统的学习.总共是四个Panel,分别为PanelQuery,PanelAdd,PanelEdit,以及PanelDetail,在PanelQuery主要的是插入一个Gridview控件和一个SqlDataSourse,而在PanelAdd中主要是添加一些最基本的button和lable以及textbox控件,此外还涉及到一些之前没有用过的控件一些属性,例如RequireFieldValidator的ErrorMessage,ControlTovalidate属性,以及RegularExpressionValidator的ErrorMessage,ControlTovalidate和ValidationExpression属性 在后面的三个Panel中用到的基本控件的属性跟前面的差不多.在项目实施的过程中,我们首先对项目进行了整体规划。然后进行小组分工合作完成项目规划,然后由组长进行整合。在老师的细心教导和积极指导下,我们首先是将所有的界面做好,然后就是开始编写代码。在整个项目实施过程中,我们小组成员之间的相互合作和互动非常默契。我们积极处理各种在项目中遇到的问题,自己解决不了的就寻求帮助,整个项目完成的很顺利。 接下来是我们项目过程中实施过程中的相关代码: 1.login(用户登录界面) public partial class _Default : System.Web.UI.Page { amendPassword transfer;protected void Page_Load(object sender, EventArgs e){ } protected void Button1_Click(object sender, EventArgs e){ transfer = new amendPassword();string NewPwd = this.txtUserPwd.Text.Trim();string sqlQuery = “select userId,userPwd from Users where userId='” + txtUserName.Text.Trim()+ “'”;DataBase DB = new DataBase();DataTable dt = DB.DataSelect(sqlQuery);try { int Row = dt.Rows.Count;if(Row == 0){ Response.Write(amendPassword.Show_MessageBox(“没有此用户!”));this.txtUserName.Text = “";this.txtUserName.Focus();return;} else { string sel_userid = dt.Rows[0][”UserID“].ToString();string sel_Pwd = dt.Rows[0][”userPwd“].ToString().Trim();string confirm_pwd = transfer.EncryptPassword(NewPwd, ”MD5“).Trim();if(sel_Pwd!= confirm_pwd){ Response.Write(amendPassword.Show_MessageBox(”用户密码错误!“));this.txtUserPwd.Text.Trim();this.txtUserPwd.Focus();return;} else { Session[”userID“] = txtUserName.Text.Trim();Response.Redirect(”TreeAddress/Tree.aspx“);} } } catch(System.Exception ee){ Response.Write(”script language=javascript>alert('“ + ee.Message.ToString()+ ”')“);} } } 2.ModifyPwd(修改密码) public partial class ModifyPwd : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e){ if(!IsPostBack){ if(this.Session[”userID“] == null){ Response.Redirect(”Default.aspx“);} else { Label1.Text = Session[”userID“].ToString();} } } protected void btnSubmit_Click(object sender, EventArgs e){ amendPassword transfer = new amendPassword();string oldPwd = this.txtOldPwd.Text.Trim();string NewPwd = this.txtOldPwd.Text.Trim();string Old_password = transfer.EncryptPassword(oldPwd, ”MD5“).ToString();string New_password = transfer.EncryptPassword(NewPwd, ”MD5“).ToString();//string comfirmPwd=this.txtOldPwd.Text.Trim();SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings[”VoteConnectionString“]);SqlCommand selectcmd = new SqlCommand(”select * from Users where userId='“ + Session[”userID“].ToString()+ ”'and userPwd='“ + Old_password + ”'“, conn);try { conn.Open();SqlDataReader sdr = selectcmd.ExecuteReader();if(sdr.Read()){ sdr.Close();SqlCommand updatecmd = new SqlCommand(”update Users set userPwd='“ + New_password + ”' where userId='“ + Session[”userID“].ToString()+ ”'“, conn);int i = updatecmd.ExecuteNonQuery();if(i > 0){ Response.Write(”“);} else { Response.Write(”“);} } else { Response.Write(”“);} } catch(System.Exception ee){ Response.Write(”“);} finally { conn.Close();} } protected void btnReset_Click(object sender, EventArgs e){ txtConfirmPwd.Text = ”“;txtNewPwd.Text = ”“;txtOldPwd.Text = ”“;} 3.GridViewUsage(添加好友信息) public partial class GridViewUsage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e){ if(!IsPostBack){ if(Session[”userID“] == null || Session[”userID“].ToString()== ”“){ Page.Response.Redirect(”default.aspx“);} else { dataBind();lblID.Text = Session[”userID“].ToString();detailsAllBind();} } } private void dataBind(){ string ID = Session[”UserID“].ToString();string sql1 = ”select * from addresslist where userID='“ + ID + ”'order by id desc“;DataBase db = new DataBase();DataSet ds = db.DataAll(sql1);GVUsage.DataSource = ds;GVUsage.DataKeyField = ”id“;GVUsage.DataBind();ShowStatsPage();return;} private void dataBind1(){ string ID = Session[”UserID“].ToString();string newfrdName=Session[”frdName“].ToString();string sql1 = ”select * from addresslist where userID='“ + ID + ”'“ + ” frdName like '%“ + newfrdName + ”%'“;DataBase db = new DataBase();DataSet ds = db.DataAll(sql1);GVUsage.DataSource = ds;GVUsage.DataKeyField = ”id“;GVUsage.DataBind();ShowStatsPage();return;} private void detailsBind(){ SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings[”ConnectionString“].ConnectionString);string detailsID = ViewState[”id“].ToString();string sql2 = ”select id,userId,frdName,frdPhone,frdMobilePhone,frdAddress,frdQQ,frdEmail from addresslist where id='“ + detailsID + ”'“;conn1.Open();SqlCommand cmd = new SqlCommand(sql2, conn1);SqlDataReader myReader = cmd.ExecuteReader();DetailsView1.DataSource = myReader;DetailsView1.DataBind();myReader.Close();} private void detailsAllBind(){ SqlConnection conn2 = new SqlConnection(ConfigurationManager.ConnectionStrings[”ConnectionString“].ConnectionString);string sql3 = ”select * from addresslist order by id desc“;conn2.Open();SqlDataAdapter da = new SqlDataAdapter(sql3, conn2);DataSet ds = new DataSet();da.Fill(ds, ”detailsTable“);DetailsView1.DataSource = ds;DetailsView1.DataBind();conn2.Close();} protected void btnGo_Click(object sender, EventArgs e){ try { if(txtGoPage.Text.Trim()!= ”“){ int PageI = Int32.Parse(txtGoPage.Text.Trim())1)){ GVUsage.CurrentPageIndex += 1;} break;case ”prev“: if(GVUsage.CurrentPageIndex > 0){ GVUsage.CurrentPageIndex-= 1;} break;case ”last“: GVUsage.CurrentPageIndex =(GVUsage.PageCount-1);break;case ”fist": GVUsage.CurrentPageIndex = 0;break;default: GVUsage.CurrentPageIndex = System.Convert.ToInt32(arg);break;} dataBind();ShowStatsPage();} protected void Button3_Click(object sender, EventArgs e){ dataBind1();} } 这些代码是我们界面中使用的一部分,由于小组的能力有限,代码大部分参考老师所给的资料,虽然如此,我们还是从中学到了一些新知识,这对接下来我们要学习的大欧地板项目有一定的奠基作用。在整个项目实施过程中,我们小组合作的很愉快,也极大培养的我们分工合作以及团队合作精神。第四篇:通讯录管理系统
第五篇:通讯录系统总结