本科毕业设计论文手机短信管理系统.docx
《本科毕业设计论文手机短信管理系统.docx》由会员分享,可在线阅读,更多相关《本科毕业设计论文手机短信管理系统.docx(42页珍藏版)》请在冰豆网上搜索。
本科毕业设计论文手机短信管理系统
宜宾学院
课程设计文档
课程软件编程实践
题目手机短信管理系统
院别计算机与信息工程学院
专业软件工程
学生姓名
学号
班级2015级6班
授课教师
第2章
系统总体设计
2.1系统功能结构描述
手机短信管理系统是手机实现功能的一组重要的代码程序,主要实现对手机中的通讯录进行添加、修改、查询功能,实现对手机中短信进行添加、修改、查询功能,能对短信进行记录和管理,在新建短信的时候也可以查看通讯录上联系人的信息,通讯录是对手机上的联系人进行操作,可以方便的查看和使用,对联系人的姓名、电话、类型、邮箱进行管理,建立通讯录更是方便了短信的操作。
功能结构需求如下:
❑通讯录模块:
本功能主要是实现对用户信息的添加、删除、查询功能。
❑短信模块:
本功能主要是实现对用户发送短信的添加、删除、查询功能。
基本功能:
(1)查看功能:
a.当输入编号时,显示出该编号的数据;
b.可以查看所有的编号的数据;
(2)添加功能:
a.能录入新数据添加到文件中(联系人添加到addressbook.dll文件中,短信信息添加到message.dll文件中),当录入了重复的编号时,则提示数据录入重复并取消录入。
(3)修改功能:
a.选中某个人的编号时,可对此人的信息进行修改;
(4)删除功能:
选中某个人的编号时,可对此人在文件中的相应数据进行删除。
(5)主界面提供菜单选择的方法选择实现某一功能,一次运行程序能进行多次选择执行不同的功能。
2.2系统功能结构图
2.3系统开发目标
对于典型的管理系统,尤其是对像手机短信管理系统这样的非常实用的管理系统,必须要满足使用方便、操作灵活等设计需求。
本系统在设计时应满足以下几个目标:
1.采用人机对话的操作方式,界面设计美观友好,信息查看灵活、方便、快捷、准确,数据存储安全可靠。
2.对用户输入的数据,系统进行严格的数据检验,尽可能排除重复的错误。
3.系统运行稳定安全可靠。
第3章
通讯录设计
3.1通讯录概念结构设计
通讯录是对手机上的联系人进行操作,可以方便的查看和使用,对联系人的姓名、电话、类型、邮箱进行管理,建立通讯录更是方便了短信的操作,数据储存在addressbook.dll文件中
3.2数据存储
表2-1用户基本信息
中文名称:
用户基本信息
中文名称
类型
键值
注释
编号
整型
记录用户编号(唯一)
姓名
字符型
记录用户姓名
电话
字符型
记录用户电话
邮箱
字符型
记录用户邮箱
类型
字符型
记录用户类型
第4章短信设计
4.1短信概念结构设计
短信的功能能对通信录的联系人进行添加短信,也可以由用户新建,数据保存在message.dll文件中。
4.2数据存储
表2-2短信功能基本信息
中文名称:
竞赛项目基本信息
中文名称
类型
键值
注释
编号
整型
姓名
字符型
电话
字符型
内容
字符型
第5章系统详细设计
5.1概要设计
5.1.1函数声明
voidmain();//主函数
voidAddressbookmenu();//通讯录
voidMessagemenu();//短信
5.1.2结构体声明
typedefstructPatient_Info//typedef自定义结构体类型PatientInfo,可以用PatientInfo来定义变量
{
intnumber;//编号
charname[8];//姓名
charphonecode[20];//电话号码
chargroup[10];//类型
charemail[20];//邮箱
charcontent[200];//短信内容
}PatientInfo;
5.2主要函数
5.2.1主函数
5.2.1.2流程图
5.2.1.3程序截图
图4-2主界面截图
5.2.1.4源代码
/*
项目名称:
手机短信管理系统
实施时间:
2015年12月22日
创建人:
郭成
*/
//调用预处理
#include"stdio.h"//标准输入输出
#include"stdlib.h"//常用的系统函数
//函数声明
voidAddressbookmenu();//通讯录
voidMessagemenu();//短信
//主函数
voidmain()
{
charfilename[20];//文件名变量
inti;
system("title手机短信管理系统");//设置cmd窗口标题
system("color3B");//背景湖蓝,字体白
do
{
system("cls");//清屏
printf("nowdatetime:
\n");
system("date/T");//调用系统日期
system("TIME/T");//调用系统时间
printf("\n\n\n");
printf("\n\t\t\t------------------------------------------------------------\n");
printf("\t\t\t*==============手机短信管理系统==============*\n");
printf("\n\t\t\t------------------------------------------------------------\n");
printf("\t\t**\n");
printf("\t\t***1.通讯录***\n");
printf("\t\t***2.短信***\n");
printf("\t\t**\n");
printf("\t\t********************\n");
printf("\t\t***0.退出系统***\n");
printf("\t\t**************\n");
printf("\n\t\t\t------------------------------------------------------------\n");
printf("\t\t\tYIBINUniversity");
printf("\n\t\t\t------------------------------------------------------------\n");
scanf("%d",&i);
switch(i)
{
case1:
system("cls");Addressbookmenu();break;//case1调用addressbookmenu函数
case2:
system("cls");Messagemenu();break;//case2调用messagemenu函数
case0:
break;//case0退出
default:
printf("错误选择!
请重选");break;
//default:
....break;一般用在switch语句里面,它的作用是在比较i和下面的1、2之后都不一致就执行。
当然如果都不满足也可以不去做任何事,所以就可以省略不用
}
}while(i!
=0);//当i不等于0循环
}
5.2.2通讯录
5.2.2.2流程图
(图4-3)通讯录流程图
添加功能:
录入新的联系人数据,姓名、电话号码、类型、邮箱。
(图4-4)添加功能流程图
删除功能:
输入编号,对其信息进行删除。
(图4-4)删除功能流程图
修改功能:
输入编号,对其信息进行修改。
(图4-5)修改功能流程图
查看:
输入编号,显示出此编号的姓名、电话号码、类型、邮箱。
(图4-6)显示功能流程图
5.2.2.3程序截图
(图4-7)通讯录主界面截图
(图4-8)添加功能截图
(图4-9)修改功能截图
(图4-10)显示功能截图
5.2.2.4源代码
/*
项目名称:
手机短信管理系统
实施时间:
2015年12月22日
创建人:
郭成
*/
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
//定义结构体类型
typedefstructPatient_Info//typedef自定义结构体类型PatientInfo,可以用PatientInfo来定义变量
{
intnumber;//编号
charname[8];//姓名
charphonecode[20];//电话号码
chargroup[10];//类型
charemail[20];//邮箱
charcontent[200];//短信内容
}PatientInfo;
//局部函数声明
staticvoidInsert(char[]);
staticvoidSearch(char[]);
staticvoidUpdate(char[]);
staticvoidDelete(char[]);
staticvoidShow(char[]);
//主菜单
voidAddressbookmenu()
{
charfilename[20];//文件名变量
inti;
charAdd[]="Addressbook.dll";//指定文件
strcpy(filename,Add);
do
{
printf("\nnowdatetime:
\n");
system("date/T");
system("TIME/T");
printf("\n\n\n");
printf("\t\t*==============手★机★通★讯★录★管★理★系★统==============*\n");
printf("\t\t**\n");
printf("\t\t*1.添加联系人2.删除联系人*\n");
printf("\t\t*3.修改联系人4.查看联系人*\n");
printf("\t\t*5.显示所有联系人6.关闭通讯录*\n");
printf("\t\t**\n");
printf("\t\t********************\n");
printf("\t\t**请输入序号**\n");
printf("\t\t********************\n");
printf("\t\t*==============================================================*\n");
scanf("%d",&i);
fflush(stdin);//清空输入缓存,以便不影响后面输入的东西
switch(i)
{
case1:
system("cls");Insert(filename);break;
case2:
system("cls");Delete(filename);break;
case3:
system("cls");Update(filename);break;
case4:
system("cls");Search(filename);break;
case5:
system("cls");Show(filename);break;
case6:
break;
default:
printf("错误选择!
请重选");break;
}
}while(i!
=6);
}
//添加联系人
voidInsert(charFilename[])
{
/*
函数说明:
对指定文件名进行数据的插入
形参说明:
数组作为形参,实参必须是一个地址,用于传递文件名
调用位置:
addressbookmenu函数
创建人:
郭成
创建日期:
12月22日
*/
intin_number;
PatientInfoP;//定义一个信息的变量
intflag=1;
FILE*fp;
fp=fopen(Filename,"r");//以只读方式打开文件,第一个参数:
文件名,第二个参数是打开方式,a表示追加写方式,w表示覆盖写,r表示只读方式,返回值是一个文件指针
printf("请根据以下提示信息操作:
");
printf("\n编号:
");//先查重,再追加插入
scanf("%d",&in_number);
while(!
feof(fp)&&flag)//feof表示endoffile,表示文件末尾,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",P.name);
printf("请输入电话:
");
scanf("%s",&P.phonecode);
printf("请输入类型:
");
printf("存储类别:
(A.办公类B.个人类C.商务类)");
scanf("%s",P.group);
printf("请输入邮箱:
");
fflush(stdin);//清空输入缓存,以便不影响后面输入的东西
scanf("%s",P.email);
printf("\n------------------------------------------------------------");
if(fwrite(&P,sizeof(PatientInfo),1,fp)!
=1)/*fwrite是文件写函数,从P变量中向文件中写入一条短信信息,第一个参数是来源变量的地址,
第二个参数是写的长度单位,第三个参数是写几个单位,第四个参数是要写的文件*/
{
printf("输入数据失败,请重新输入!
");
}
else
printf("\n添加成功!
");
fclose(fp);
}
voidSearch(charFilename[])
{
/*
函数说明:
从指定文件中查找数据
形参说明:
数组作为形参,实参必须是一个地址,用于传递文件名
调用位置:
addressbookmenu函数
创建人:
郭成
创建日期:
12月22日
*/
intin_number;
PatientInfoP;
intflag=1;
FILE*fp;
fp=fopen(Filename,"r");
printf("\n请根据以下提示信息操作:
");
printf("\n编号:
");
scanf("%d",&in_number);
system("cls");
while(fread(&P,sizeof(PatientInfo),1,fp)&&flag)//fread是文件输出函数,返回值为1表示读成功
{
if(P.number==in_number)
{
printf("\n\t\t\t------------------------------------------------------------\n");
printf("\n\t\t\t|编号\t|姓名\t|电话\t\t|类型\t|邮箱\t\t\t|");
printf("\n\t\t\t|%d\t",P.number);
printf("%s\t",P.name);
printf("%s\t",P.phonecode);
printf("%s\t",P.group);
printf("%s\t|",P.email);
printf("\n\n\t\t\t联系人%s的信息已显示出来!
\n",P.name);
printf("\t\t\t------------------------------------------------------------");
flag=0;
}
}
fclose(fp);
if(flag)
{
printf("没有你要找的联系人!
");
}
}
voidUpdate(charFilename[])//
{
/*
函数说明:
修改指定文件中的数据
形参说明:
数组作为形参,实参必须是一个地址,用于传递文件名
调用位置:
addressbookmenu函数
创建人:
郭成
创建日期:
12月22日
*/
intin_number;
PatientInfoP;
intflag=1;
FILE*fp,*fptemp;//必须两个文件操作,fp是数据源文件,fptemp是临时文件,修改后的数据临时放入该文件中
fp=fopen(Filename,"r");//文件读
fptemp=fopen("temp.txt","w");//文件写
printf("\n修改联系人信息");
printf("\n请输入你要修改的联系人的编号:
");//先查询,再修改
scanf("%d",&in_number);
while(fread(&P,sizeof(PatientInfo),1,fp))//文件读
{
if(P.number==in_number)//读出修改
{
P.number=in_number;
printf("请输入姓名:
");
scanf("%s",P.name);
printf("请输入电话:
");
scanf("%s",&P.phonecode);
printf("请输入类型:
");
printf("存储类别:
(A.办公类B.个人类C.商务类)");
scanf("%s",P.group);
printf("请输入邮箱:
");
fflush(stdin);//清空输入缓存,以便不影响后面输入的东西
scanf("%s",P.email);
printf("\n------------------------------------------------------------");
flag=0;
}
fwrite(&P,sizeof(PatientInfo),1,fptemp);/*找没找到都往临时文件中写,因为对文件操作只有追加和覆盖写两种方方式,
因此修改中间某条记录不方便,只能引入第二个文件或者放入数据、链表中*/
printf("\n修改成功!
");
}
fclose(fp);
fclose(fptemp);
if(flag)
{
printf("没有你要查询的结果!
");
}
else
{
fptemp=fopen("temp.txt","r");//从临时文件中读
fp=fopen(Filename,"w");//往源文件中覆盖写
while(fread(&P,sizeof(PatientInfo),1,fptemp))
{
fwrite(&P,sizeof(PatientInfo),1,fp);//从临时文件中回写
}
fclose(fp);
fclose(fptemp);
}
}
voidDelete(charFilename[])//
{
/*
函数说明:
删除指定文件中的某条数据
形参说明:
数组作为形参,实参必须是一个地址,用于传递文件名
调用位置:
addressbookmenu函数
创建人:
郭成
创建日期:
12月22日
*/
intin_number;
PatientInfoP;
intflag=1;
FILE*fp,*fptemp;
fp=fopen(Filename,"r");
fptemp=fopen("temp.txt","w");
printf("\n请输入你想要删除的联系人的编号:
");//先查询,再删除
scanf("%d",&in_number);
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","r");
while(fread(&P,sizeof(PatientInfo),1,fptemp))
{
fwrite(&P,sizeof(PatientInfo),1,fp);
}
printf("删除成功!
");
fclose(fp);
fclose(fptemp);
}
}
void