您好,欢迎来到知库网。
搜索
您的当前位置:首页软件编程实践设计报告

软件编程实践设计报告

来源:知库网


宜宾学院

课程设计文档

课 程 软件编程实践 题 目 手机短信管理系统 院 别 计算机与信息工程学院 专 业 软 件 工 程 学生姓名 郭 成 学 号 151106032 班 级 2015级 6班 授课教师 曾 安 平

1

目录

第1章 系统总体设计.................................................................................................. 2 1.1 系统功能结构描述................................................................................................ 2 1.2 系统功能结构图.................................................................................................... 3 1.3 系统开发目标........................................................................................................ 3 第2章 通讯录设计 ..................................................................................................... 4 2.1 通讯录概念结构设计............................................................................................ 4 2.2 数据存储................................................................................................................ 4 第3章 短信录设计 ..................................................................................................... 5 3.1 短信概念结构设计................................................................................................ 5 3.2 数据存储................................................................................................................ 5 第4章 系统详细设计 ................................................................................................. 6 4.1 概要设计................................................................................................................ 6

4.1.1 函数声明.................................................................................................... 6 4.1.2 结构体声明................................................................................................ 6 4.2 主要函数................................................................................................................ 7

4.2.1 主函数........................................................................................................ 7

4.2.1.2 流程图............................................................................................ 7 4.2.1.3 程序截图........................................................................................ 8 4.2.1.4 源代码............................................................................................ 8 4.2.2 通讯录...................................................................................................... 10

4.2.2.2 流程图.......................................................................................... 10 4.2.2.3 程序截图...................................................................................... 13 4.2.2.4 源代码.......................................................................................... 15 4.2.3 短信录...................................................................................................... 23

4.2.3.2 流程图.......................................................................................... 23 4.2.3.3 程序截图...................................................................................... 25 4.2.3.4 源代码.......................................................................................... 27

第5章 总结 ............................................................................................................... 35

1

第1章 系统总体设计

1.1 系统功能结构描述

手机短信管理系统是手机实现功能的一组重要的代码程序,主要实现对手机中的通讯录进行添加、修改、查询功能,实现对手机中短信进行添加、修改、查询功能,能对短信进行记录和管理 ,在新建短信的时候也可以查看通讯录上联系人的信息,通讯录是对手机上的联系人进行操作,可以方便的查看和使用,对联系人的姓名、电话、类型、邮箱进行管理,建立通讯录更是方便了短信的操作。 功能结构需求如下:

 通讯录模块 :本功能主要是实现对用户信息的添加、删除、查询功能。  短信模块:本功能主要是实现对用户发送短信的添加、删除、查询功能。

基本功能: (1)查看功能:

a.当输入编号时,显示出该编号的数据; b.可以查看所有的编号的数据; (2)添加功能:

a.能录入新数据添加到文件中(联系人添加到addressbook.dll文件中,短信信息添加到message.dll文件中),当录入了重复的编号时,则提示数据录入重复并取消录入。 (3)修改功能:

a.选中某个人的编号时,可对此人的信息进行修改;

(4)删除功能:选中某个人的编号时,可对此人在文件中的相应数据进行删除。 (5)主界面提供菜单选择的方法选择实现某一功能,一次运行程序能进行多次选择执行不同的功能。

2

1.2 系统功能结构图

手机短信管理系统 通讯录 短信 添加联系人 删除联系人 修改联系人 查看联系人 新建短信 删除短信 修改短信 查看短信 显示所有 图3-1 系统功能结构图

1.3 系统开发目标

对于典型的管理系统,尤其是对像手机短信管理系统这样的非常实用的管理系统,必须要满足使用方便、操作灵活等设计需求。本系统在设计时应满足以下几个目标:

1.采用人机对话的操作方式,界面设计美观友好,信息查看灵活、方便、快捷、准确,数据存储安全可靠。

2.对用户输入的数据,系统进行严格的数据检验,尽可能排除重复的错误。 3.系统运行稳定安全可靠。

3

第2章 通讯录设计

2.1 通讯录概念结构设计

通讯录是对手机上的联系人进行操作,可以方便的查看和使用,对联系人的姓名、电话、类型、邮箱进行管理,建立通讯录更是方便了短信的操作,数据储存在addressbook.dll 文件中

2.2 数据存储

表2-1 用户基本信息 中文名称: 中文名称 编号 姓名 电话 邮箱 类型 用户基本信息 类型 整型 字符型 字符型 字符型 字符型 键值 注释 记录用户编号(唯一) 记录用户姓名 记录用户电话 记录用户邮箱 记录用户类型 4

第3章 短信设计

3.1 短信概念结构设计

短信的功能能对通信录的联系人进行添加短信,也可以由用户新建,数据保存在message.dll 文件中。

3.2 数据存储

表2-2 短信功能基本信息 中文名称: 中文名称 编号 姓名 电话 内容 竞赛项目基本信息 类型 整型 字符型 字符型 字符型 键值 注释 5

第4章 系统详细设计

4.1 概要设计

4.1.1 函数声明

void main();//主函数

void Addressbookmenu();//通讯录 void Messagemenu();//短信

4.1.2 结构体声明

typedef struct Patient_Info//typedefPatientInfo来定义变量 { int number;//编号 char name[8];//姓名

char phonecode[20]; //电话号码 char group[10];//类型 char email[20];//邮箱

char content[200];//短信内容

}PatientInfo;

定义结构体类型PatientInfo,可以用6

4.2 主要函数

4.2.1 主函数

4.2.1.2 流程图 开始 读出功能代码 F i=0 F T i=1 i=2 T 进入系统 1 2 短信 通讯录 退出管理系统

图4-1 主函数流程图

7

4.2.1.3 程序截图

图4-2主界面截图

4.2.1.4 源代码

/*

项目名称:手机短信管理系统 实施时间:2015年12月22日 创建人:郭成 */

//调用预处理

#include\"stdio.h\"//标准输入输出 #include\"stdlib.h\"//常用的系统函数

//函数声明

void Addressbookmenu();//通讯录 void Messagemenu();//短信

//主函数 void main() {

char filename[20];//文件名变量 int i;

system(\"title 手机短信管理系统\");//设置cmd窗口标题 system(\"color 3B\");//背景湖蓝,字体白 do

8

图4-1 主界面流程图

{ system(\"cls\");//清屏 printf(\"now datetime:\\n\"); system(\"date /T\");//调用系统日期 system(\"TIME /T\");//调用系统时间 printf( \"\\n\\n\\n\" ); printf(\"\\n\\\ ------------------------------------------------------------\\n\"); printf(\"\\\ *==============手机短信管理系统==============*\\n\");

printf(\"\\n\\\ ------------------------------------------------------------\\n\"); printf(\"\\ * *\\n\");

printf(\"\\ * ** 1.通讯录 ** *\\n\");

printf(\"\\ * ** 2.短信 ** *\\n\");

printf(\"\\ * *\\n\");

printf(\"\\ * ****************** *\\n\");

printf(\"\\ * ** 0.退出系统 ** *\\n\");

printf(\"\\ * ************ *\\n\");

printf(\"\\n\\\ ------------------------------------------------------------\\n\"); printf(\"\\\ YIBIN University \");

printf(\"\\n\\\ ------------------------------------------------------------\\n\"); scanf(\"%d\ switch (i) { case 1: system(\"cls\"); Addressbookmenu(); break;//case1 调用addressbookmenu函数

case 2: system(\"cls\"); Messagemenu(); break;//case2 调用messagemenu函数

case 0: break;//case0 退出 default:printf(\"错误选择!请重选\"); break; //default : ....break;一般用在switch语句里面,它的作用是在比较i和下面的1、2之后都不一致就执行。当然如果都不满足也可以不去做任何事,所以就可以省略不用

}

} while (i != 0);//当i不等于0循环 }

9

4.2.2 通讯录

4.2.2.2 流程图

开始 读出功能代号 1 添加 删除 2 3 6 显示 关闭 4 查看 5 修改 结束 退出通讯录 (图4-3)通讯录流程图

添加功能:录入新的联系人数据,姓名、电话号码、类型、邮箱。

10

开始 读入编号 Y 编号重复 N 录入数据 录入成功 Y 保存 返回主菜单 N 录入数据失败 (图4-4)添加功能流程图

删除功能:输入编号,对其信息进行删除。

开始 读入编号 N 有此编号 Y 删除 保存 返回主菜单 删除失败 (图4-4)删除功能流程图

11

修改功能:输入编号,对其信息进行修改。

开始 读入编号 N 有此编号 Y 修改 保存 返回主菜单 修改失败 (图4-5)修改功能流程图

查看:输入编号,显示出此编号的姓名、电话号码、类型、邮箱。

开始 打开文件 输入编号 N 有此编号 Y 显示信息 没有此编号 返回主菜单 12

(图4-6)显示功能流程图

4.2.2.3 程序截图

(图4-7)通讯录主界面截图

(图4-8)添加功能截图

13

(图4-9)修改功能截图

(图4-10)显示功能截图

14

4.2.2.4 源代码 /*

项目名称:手机短信管理系统 实施时间:2015年12月22日 创建人:郭成 */

#include\"stdio.h\" #include\"stdlib.h\" #include\"string.h\"

//定义结构体类型

typedef struct Patient_Info//typedef自定义结构体类型PatientInfo,可以用PatientInfo来定义变量 {

int number;//编号 char name[8];//姓名

char phonecode[20]; //电话号码 char group[10];//类型 char email[20];//邮箱

char content[200];//短信内容 }PatientInfo;

//局部函数声明

static void Insert(char[]); static void Search(char[]); static void Update(char[]); static void Delete(char[]); static void Show(char[]);

//主菜单

void Addressbookmenu() {

char filename[20] ;//文件名变量 int i;

char Add[]=\"Addressbook.dll\";//指定文件 strcpy(filename,Add); do { printf(\"\\nnow datetime:\\n\"); system(\"date /T\"); system(\"TIME /T\"); printf(\"\\n\\n\\n\"); printf(\"\\ *==============手★机★通★讯★录★管★

15

理★系★统==============*\\n\"); printf(\"\\ * *\\n\"); printf(\"\\ * 1.添加联系人 2.删除联系人 *\\n\"); printf(\"\\ * 3.修改联系人 4.查看联系人 *\\n\"); printf(\"\\ * 5.显示所有联系人 6.关闭通讯录 *\\n\"); printf(\"\\ * *\\n\"); printf(\"\\ * ****************** *\\n\"); printf(\"\\ * * 请输入序号 * *\\n\"); printf(\"\\ * ****************** *\\n\"); printf(\"\\

*==============================================================*\\n\"); scanf(\"%d\ fflush(stdin);//清空输入缓存,以便不影响后面输入的东西 switch (i) { case 1: system(\"cls\"); Insert(filename); break; case 2: system(\"cls\"); Delete(filename); break; case 3: system(\"cls\"); Update(filename); break; case 4: system(\"cls\"); Search(filename); break; case 5: system(\"cls\"); Show(filename); break; case 6: break; default:printf(\"错误选择!请重选\"); break; } } while (i != 6); }

//添加联系人

void Insert(char Filename[]) {

/*

函数说明:对指定文件名进行数据的插入

形参说明:数组作为形参,实参必须是一个地址,用于传递文件名 调用位置:addressbookmenu函数 创建人:郭成

创建日期:12月22日

16

*/

int in_number;

PatientInfo P;//定义一个信息的变量 int flag = 1; FILE *fp;

fp = fopen(Filename, \"r\");//以只读方式打开文件,第一个参数:文件名,第二个参数是打开方式,a表示追加写方式,w表示覆盖写,r表示只读方式,返回值是一个文件指针

printf(\" 请根据以下提示信息操作:\"); printf(\"\\n 编号:\");//先查重,再追加插入 scanf(\"%d\

while (!feof(fp) && flag)//feof表示 end of file,表示文件末尾,true表示文件末尾,否则不是文件末尾。&&flag表示还未查找到 { if (fread(&P, sizeof(PatientInfo), 1, fp))/*fread是文件输出函数,从文件中读取一条联系人信息放入P变量中,第一个参数是目标变量的地址, 第二个参数是读取的长度单位,第三个参数是读取几个单位,第四个参数是要读取的文件,返回值为1表示成功,否则表示失败*/ { if (P.number == in_number) { printf(\"\\n 该编号已存在,自动取消录入!\\n\"); flag = 0; } }

}

fclose(fp);//关闭文件以便追加记录 if (flag) { fp = fopen(Filename, \"a\");//以追加方式打开文件准备追加

} else return;

P.number = in_number;

printf(\" 请输入姓名:\"); scanf(\"%s\

printf(\" 请输入电话:\"); scanf(\"%s\

printf(\" 请输入类型:\");

printf(\" 存储类别:(A.办公类 B.个人类 C.商务类) \"); scanf(\"%s\

printf(\" 请输入邮箱:\");

17

fflush(stdin);//清空输入缓存,以便不影响后面输入的东西 scanf(\"%s\

printf(\" \\n ------------------------------------------------------------\");

if (fwrite(&P, sizeof(PatientInfo), 1, fp) != 1)/*fwrite是文件写函数,从P变量中向文件中写入一条短信信息,第一个参数是来源变量的地址, 第二个参数是写的长度单位,第三个参数是写几个单位,第四个参数是要写的文件*/ { printf(\"输入数据失败,请重新输入!\"); } else

printf(\"\\n 添加成功!\"); fclose(fp); }

void Search(char Filename[]) {

/*

函数说明:从指定文件中查找数据

形参说明:数组作为形参,实参必须是一个地址,用于传递文件名 调用位置:addressbookmenu函数 创建人:郭成

创建日期:12月22日 */

int in_number; PatientInfo P; int flag = 1; FILE *fp;

fp = fopen(Filename, \"r\");

printf(\"\\n 请根据以下提示信息操作:\"); printf(\"\\n 编号:\"); scanf(\"%d\ system(\"cls\");

while (fread(&P, sizeof(PatientInfo), 1, fp) && flag)//fread是文件输出函数,返回值为1表示读成功 { if (P.number == in_number) { printf(\"\\n\\\ ------------------------------------------------------------\\n\"); printf(\"\\n\\\| 编号\| 姓名\| 电话\\| 类型\| 邮箱\\\|\"); printf(\"\\n\\\| %d\ \ printf(\" %s\ \ printf(\" %s\ \ printf(\" %s\ \ printf(\" %s\|\

18

printf(\"\\n\\n\\\ 联系人%s的信息已显示出来!\\n\ printf(\"\\\ ------------------------------------------------------------\"); flag=0; } }

fclose(fp); if (flag) { printf(\" 没有你要找的联系人!\"); } }

void Update(char Filename[])// {

/*

函数说明:修改指定文件中的数据

形参说明:数组作为形参,实参必须是一个地址,用于传递文件名 调用位置:addressbookmenu函数 创建人:郭成

创建日期:12月22日 */

int in_number; PatientInfo P; int flag = 1;

FILE *fp, *fptemp;//必须两个文件操作,fp是数据源文件,fptemp是临时文件,修改后的数据临时放入该文件中 fp = fopen(Filename, \"r\");//文件读

fptemp = fopen(\"temp.txt\文件写

printf(\"\\n 修改联系人信息\");

printf(\"\\n 请输入你要修改的联系人的编号:\");//先查询,再修改 scanf(\"%d\

while (fread(&P, sizeof(PatientInfo), 1, fp))//文件读 { if (P.number == in_number)//读出修改 { P.number = in_number; printf(\" 请输入姓名:\"); scanf(\"%s\ printf(\" 请输入电话:\"); scanf(\"%s\ printf(\" 请输入类型:\"); printf(\" 存储类别:(A.办公类 B.个人类 C.商务类) \"); scanf(\"%s\

19

printf(\" 请输入邮箱:\"); fflush(stdin);//清空输入缓存,以便不影响后面输入的东西 scanf(\"%s\ printf(\" \\n ------------------------------------------------------------\"); flag = 0; } fwrite(&P, sizeof(PatientInfo), 1, fptemp);/*找没找到都往临时文件中写,因为对文件操作只有追加和覆盖写两种方方式, 因此修改中间某条记录不方便,只能引入第二个文件或者放入数据、链表中*/ printf(\" \\n 修改成功!\"); }

fclose(fp); fclose(fptemp); if (flag) { printf(\"没有你要查询的结果!\"); } else { fptemp = fopen(\"temp.txt\从临时文件中读 fp = fopen(Filename, \"w\");//往源文件中覆盖写 while (fread(&P, sizeof(PatientInfo), 1, fptemp)) { fwrite(&P, sizeof(PatientInfo), 1, fp);//从临时文件中回写 } fclose(fp); fclose(fptemp); } }

void Delete(char Filename[])// {

/*

函数说明:删除指定文件中的某条数据

形参说明:数组作为形参,实参必须是一个地址,用于传递文件名 调用位置:addressbookmenu函数 创建人:郭成

创建日期:12月22日 */

int in_number; PatientInfo P; int flag = 1;

20

FILE *fp, *fptemp;

fp = fopen(Filename, \"r\");

fptemp = fopen(\"temp.txt\

printf(\"\\n 请输入你想要删除的联系人的编号:\");//先查询,再删除

scanf(\"%d\

while (fread(&P, sizeof(PatientInfo), 1, fp)) { if (P.number != in_number)//如果找到要删除的记录则不写,否则都要写 fwrite(&P, sizeof(PatientInfo), 1, fptemp); else flag = 0; }

fclose(fp); fclose(fptemp); if (flag) { printf(\" 没有你要删除的编号!\"); } else { fp = fopen(Filename, \"w\"); fptemp = fopen(\"temp.txt\ while (fread(&P, sizeof(PatientInfo), 1, fptemp)) { fwrite(&P, sizeof(PatientInfo), 1, fp); } printf(\" 删除成功!\"); fclose(fp); fclose(fptemp); } }

void Show(char Filename[]) {

/*

函数说明:显示指定文件中的所有数据

形参说明:数组作为形参,实参必须是一个地址,用于传递文件名 调用位置:addressbookmenu函数 创建人:郭成

创建日期:12月22日 */

PatientInfo P;

21

int flag = 1; FILE *fp;

fp = fopen(Filename, \"r\");

while (fread(&P, sizeof(PatientInfo), 1, fp)) { printf(\"\\n\\\ ------------------------------------------------------------\\n\"); printf(\"\\n\\\| 编号\| 姓名\| 电话\\| 类型\| 邮箱\\\|\"); printf(\"\\n\\\| %d\ \ printf(\" %s\ \ printf(\" %s\ \ printf(\" %s\ \ printf(\" %s\|\ printf(\"\\n\\\ ------------------------------------------------------------\"); } printf(\"\\n\\\ 所有联系人信息已全部显示出来!\\n\"); fclose(fp);

}

22

4.2.3 短信录

4.2.3.2 流程图

开始 读出功能代号 1 新建 删除 2 3 6 显示 关闭 4 查看 5 修改 结束 关闭短信录

(图4-11)短信录主函数流程图

新建功能:在新建短信输入编号时,将判断此编号在通讯录上有无,如果有则显示出来,并对此编号发送信息,如果没有此编号则新建一条信息。

23

开始 读入编号 N 编号是否存在 Y 显示此编号信息 发送短信 保存 返回主菜单 (图4-12)新建短信流程图

(删除、修改、查看、显示流程图均与通讯录相差不大,这里就不画出来了)

24

4.2.3.3 程序截图

(图4-13)短信录主界面截图

(图4-14)短信录新建图

25

(图4-15)短信录显示图

(图4-16)短信录删除图

26

4.2.3.4 源代码 /*

项目名称:手机短信管理系统 实施时间:2015年12月22日 创建人:郭成 */

#include\"stdio.h\" #include\"stdlib.h\" #include\"string.h\"

#include \"windows.h\" //定义了Windows的所有资料型态、函数调用、资料结构和常数识别字

#include \"conio.h\" //进行输入、输出的

//定义结构体类型

typedef struct Patient_Info//typedef自定义结构体类型PatientInfo,可以用PatientInfo来定义变量 {

int number;//编号 char name[8];//姓名

char phonecode[20]; //电话号码 char group[10];//类型 char email[20];//邮箱

char content[200];//短信内容 }PatientInfo;

//局部函数声明

static void Add(char[]); static void Search(char[]); static void Alter(char[]); static void Del(char[]); static void Show(char[]);

//主菜单

void Messagemenu() {

int i;

char Filename[20];//文件名变量

char Mes[]=\"Message.dll\";//指定文件 strcpy(Filename,Mes); do { printf(\"\\nnow datetime:\\n\"); system(\"date /T\");

27

system(\"TIME /T\"); printf(\"\\n\\n\\n\"); printf(\"\\ *================手★机★短★信★管★理★系★统================*\\n\"); printf(\"\\ * *\\n\"); printf(\"\\ * 1.新建信息 2.删除信息 *\\n\"); printf(\"\\ * 3.修改信息 4.查看联系人 *\\n\"); printf(\"\\ * 5.显示所有信息 6.关闭短信录 *\\n\"); printf(\"\\ * *\\n\"); printf(\"\\ * ****************** *\\n\"); printf(\"\\ * * 请输入序号 * *\\n\"); printf(\"\\ * ****************** *\\n\"); printf(\"\\

*==============================================================*\\n\"); scanf(\"%d\ fflush(stdin);//清空输入缓存,以便不影响后面输入的东西 switch (i) { case 1: system(\"cls\"); Add(Filename); break; case 2: system(\"cls\"); Del(Filename); break; case 3: system(\"cls\"); Alter(Filename); break; case 4: system(\"cls\"); Search(Filename); break; case 5: system(\"cls\"); Show(Filename); break; case 6: break; default:printf(\"错误选择!请重选\"); break; } } while (i != 6); }

//新建短信

void Add(char Filename[])// {

/*

函数说明:对指定文件名进行数据的插入

28

形参说明:数组作为形参,实参必须是一个地址,用于传递文件名 调用位置:messagemenu函数 创建人:郭成

创建日期:12月22日 */

int in_number;

PatientInfo P;//定义一个信息的变量 int flag = 1;

FILE *fp, *fptemp;//fp是数据源文件,fptemp是临时文件

fptemp = fopen(\"Addressbook.dll\已只读方式临时打开通讯录文件,此操作是为了才看通讯录里是否有相同的编号,如果有则显示出来 printf(\" 请根据以下提示信息操作:\"); printf(\"\\n 编号:\"); scanf(\"%d\ while (!feof(fptemp) && flag) { if (fread(&P, sizeof(PatientInfo), 1, fptemp)) { if (P.number == in_number) { printf(\"\\n 该编号已存在,自动显示该编号联系人!\\n\"); printf(\"\\n\\\

------------------------------------------------------------\\n\"); printf(\"\\n\\\| 编号\| 姓名\| 电话\\| 类型\| 邮箱\\\|\"); printf(\"\\n\\\| %d\ \ printf(\" %s\ \ printf(\" %s\ \ printf(\" %s\ \ printf(\" %s\|\ printf(\"\\n\\n\\\ 联系人%s的信息已显示出来!\\n\ printf(\"\\\ ------------------------------------------------------------\"); } } }

fclose(fptemp);//关闭通讯录文件以便短信内容储存在短信文件内 fp = fopen(Filename, \"a\");//以追加方式打开短信文件准备追加 printf(\"\\n 新建短信:\\n\"); P.number = in_number;

printf(\" 姓名:\"); scanf(\"%s\

printf(\" 电话:\"); scanf(\"%s\

printf(\" 短信内容:\");

29

scanf(\"%s\

printf(\"\\n\\\ ------------------------------------------------------------\"); if (fwrite(&P, sizeof(PatientInfo), 1, fp) != 1) { printf(\"输入数据失败,请重新输入!\"); } else

printf(\"\\n 添加成功!\"); fclose(fp); }

void Search(char Filename[]) {

/*

函数说明:从指定文件中查找数据

形参说明:数组作为形参,实参必须是一个地址,用于传递文件名 调用位置:messagemenu函数 创建人:郭成

创建日期:12月22日 */

int in_number; PatientInfo P; int flag = 1; FILE *fp;

fp = fopen(Filename, \"r\");

printf(\"\\n 请根据以下提示信息操作:\");//先查重,再追加插入 printf(\"\\n 编号:\"); scanf(\"%d\ system(\"cls\");

while (fread(&P, sizeof(PatientInfo), 1, fp) && flag)//fread是文件输出函数,返回值为1表示读成功 { if (P.number == in_number) { printf(\"\\n\\\ ------------------------------------------------------------\\n\"); printf(\"\\n\\\| 编号\| 姓名\|电话\\| 短信内容 \\\|\"); printf(\"\\n\\\| %d\ printf(\"| %s\\ printf(\"| %s\\ printf(\"| %s\\ printf(\"\\n\\n\\\ 联系人%s的信息已显示出来!\\n\ printf(\"\\\ ------------------------------------------------------------\"); flag = 0; }

30

}

fclose(fp); if (flag) { printf(\" 没有你要找的信息!\"); } }

void Alter(char Filename[])// {

/*

函数说明:修改指定文件中的数据

形参说明:数组作为形参,实参必须是一个地址,用于传递文件名 调用位置:messagemenu函数 创建人:郭成

创建日期:12月22日 */

int in_number; PatientInfo P; int flag = 1;

FILE *fp, *fptemp;//必须两个文件操作,fp是数据源文件,fptemp是临时文件,修改后的数据临时放入该文件中 fp = fopen(Filename, \"r\");//文件读

fptemp = fopen(\"temp.txt\文件写

printf(\"\\n 修改联系人信息\");

printf(\"\\n 请输入你要修改的联系人的编号:\");//先查询,再修改 scanf(\"%d\

while (fread(&P, sizeof(PatientInfo), 1, fp))//文件读 { if (P.number == in_number)//读出修改 { P.number = in_number; printf(\"\\n 姓名:\"); scanf(\"%s\ printf(\" 电话:\"); scanf(\"%s\ printf(\" 短信内容:\"); scanf(\"%s\ printf(\"\\n\\\

------------------------------------------------------------\"); flag = 0; } fwrite(&P, sizeof(PatientInfo), 1, fptemp);/*找没找到都往临时文件中写,因为对文件操作只有追加和覆盖写两种方方式,

31

因此修改中间某条记录不方便,只能引入第二个文件或者放入数据、链表中*/ printf(\" \\n 修改成功!\"); }

fclose(fp); fclose(fptemp); if (flag) { printf(\"没有你要查询的结果!\"); } else { fptemp = fopen(\"temp.txt\从临时文件中读 fp = fopen(Filename, \"w\");//往源文件中覆盖写 while (fread(&P, sizeof(PatientInfo), 1, fptemp)) { fwrite(&P, sizeof(PatientInfo), 1, fp);//从临时文件中回写 } fclose(fp); fclose(fptemp); } }

void Del(char Filename[])// {

/*

函数说明:删除指定文件中的某条数据

形参说明:数组作为形参,实参必须是一个地址,用于传递文件名 调用位置:messagemenu函数 创建人:郭成

创建日期:12月22日 */

int in_number; PatientInfo P; int flag = 1;

FILE *fp, *fptemp;

fp = fopen(Filename, \"r\");

fptemp = fopen(\"temp.txt\

printf(\"\\n 请输入你想要删除的联系人的编号:\");//先查询,再删除

scanf(\"%d\

while (fread(&P, sizeof(PatientInfo), 1, fp))

32

{ if (P.number != in_number)//如果找到要删除的记录则不写,否则都要写 fwrite(&P, sizeof(PatientInfo), 1, fptemp); else flag = 0; }

fclose(fp); fclose(fptemp); if (flag) { printf(\" 没有你要删除的编号!\"); } else { fp = fopen(Filename, \"w\"); fptemp = fopen(\"temp.txt\ while (fread(&P, sizeof(PatientInfo), 1, fptemp)) { fwrite(&P, sizeof(PatientInfo), 1, fp); } printf(\" 删除成功!\"); fclose(fp); fclose(fptemp); } }

void Show(char Filename[]) {

/*

函数说明:显示指定文件中的所有数据

形参说明:数组作为形参,实参必须是一个地址,用于传递文件名 调用位置:messagemenu函数 创建人:郭成

创建日期:12月22日 */

PatientInfo P; int flag = 1; FILE *fp;

fp = fopen(Filename, \"r\");

while (fread(&P, sizeof(PatientInfo), 1, fp)) {

printf(\"\\n\\\ ------------------------------------------------------------\\n\"); printf(\"\\n\\\| 编号\| 姓名\|电话\\| 短信内容 \\\|\"); printf(\"\\n\\\| %d\

33

}

printf(\"| %s\\ printf(\"| %s\\ printf(\"| %s\\ printf(\"\\n\\\ ------------------------------------------------------------\"); }

printf(\"\\n\\\ 所以联系人的信息已显示出来!\\n\"); fclose(fp);

34

第5章 总结

经过二个周的程序设计实验,我清楚并且深刻地认识到了编写一个计算机程序的不易。要成功实现一个C程序的编译与运行,前提是熟练掌握C语言中基本的命令指示符,并且要能熟练运用各种语句结构及算法。其次,好的开始才能带动一个好的过程,一个程序的设计离不开一个清晰的逻辑框架和程序模块,同时也需要我们严格并有条理地按照既有的设计思路来进行代码的编写。代码的编写对我来说可以说是最大的一道坎,对于只有一学期C语言学习经历的我来说,要编写这么庞大复杂的程序是几乎是不可能的,但是,在代码编写过程中我不断学习,不断去想那些师兄问问题,找同学互相学习,终于把代码基本编写了出来。最后,程序的调试也是个极其困难的过程,要么是语法错误,要么修改后有些功能实现不了,那些简单的语法错误我们改正还比较容易,功能实现的问题就比较困难了,我还得四处搜集资料,或者请教老师和一些水平比较高的同学。一门技术的理论学习是辛苦的,但要懂得一门技术的运用更要付出劳动和汗水。

虽然我的程序还有很多欠缺,比如,当删除或修改通讯录中一个人的信息后,他在短信录中的信息还是没变,但最后我还是值得高兴,就像自己完成了一个奇迹一样,做了一件自己一个人几乎不可能完成的任务,那种成就感无法用语言表达。虽然程序设计困难重重,但我都坚持了下来。这两周的实验也让我明白,虽然自己手中的手机玩起来很容易,但其实手机的背后是多大的人力物力的堆积啊,这都是现代科技的成果!

总而言之,这两周的实验让我收益匪浅。它不仅将理论与实际相结合,培养了我动手操作和思考的能力,为我以后步入社会做准备。这次的实验激发了我不断学习兴趣,它让还我明白了,不论困难多大,只要我们积极思考,勇于实践,就一定能够解决问题。

35

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- zicool.com 版权所有 湘ICP备2023022495号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务