通讯录总体功能要求

合集下载

通讯录管理制度

通讯录管理制度

1.目的为增强对公司通讯录发放、更新等管理,特制定此制度。

2.适用范围公司通讯录。

3.职责3.1行政人事部负责本制度拟定、完善、更新及下发。

3.2行政人事助理负责定期更新、发放通讯录。

3.3各部门负责人负责本部门工作联系更新信息传递至行政人事助理。

3.4各员工负责自身联系更新信息传递至行政人事助理。

4.工作程序4.1通讯录版本及内容4.1.1公司通讯录分为“内部”和“外部”二个版本。

“内部”通讯录记录公司所有人员的通讯信息,仅发放于公司总部相关部门;“外部”通讯录记录部门负责人、部门助理,及经常与办事处沟通人员的通讯信息,发放于办事处。

4.1.2公司通讯录按照部门顺序记录以下内容:大部名称、部门名称、姓名、岗位、分机、手机、固定电话、传真、邮箱等信息。

4.2通讯录更新4.2.1行政人事助理依据上周发生的人员入职、离职、调岗等信息更新通讯录,于每周一下班前以邮件方式发放最新通讯录。

4.2.2公司各员工在自身通讯方式发生变更三个工作日内,把更新通讯信息传递至行政人事助理处。

4.2.3各部门对外工作联系信息,包括但不限于办公地址、办公电话、传真等发生变化时,由部门负责人或部门助理在变更后三个工作日内传递更新信息至行政人事助理处。

4.2.4公司部门架构、公司对外工作联系信息等发生变化时,经CEO审批后,由行政人事助理直接更新。

4.3通讯录发放接收人员4.3.1《通讯录(内部)》发放接受人员为:CEO、CTO、COO;各大部总监;部门经理;需与外部经常联系的部门助理、岗位人员。

4.3.2《通讯录(外部)》发放接受人员为:大区经理、办事处经理、办事处文秘。

4.4通讯录管理4.4.1公司通讯录为公司受控文件,严禁接受人员随意转发。

如发现转发的,处于200元/次经济处罚。

4.4.2如因正常工作需要,需取得通讯录的,由行政人事部总监审批。

4.4.3工作之外,要求取得通讯录的,由行政人事部总监审核后,由CEO审批。

通讯录C语言程序设计报告书

通讯录C语言程序设计报告书

一、实践的目的和要求加深对C语言课程所学知识的理解,进一步巩固C语言算法规则.学会编制结构清晰.风格良好.数据结构适当的C程序,从而具备解决综合性问题的能力.二、内容在熟练掌握C语言的基础知识:数据类型(整型.实型.字符型.指针.数组.结构等);运算类型(算术运算.逻辑运算.自增自减运算.赋值运算等);程序结构(顺序结构.判断选择结构.循环结构);大程序的功能分解方法(即函数的使用)等.进一步掌握各种函数的应用以及文件的读写操作等.三、实验任务:通讯录设计要求:实现菜单设计,使用数据文件保存和修改,应用结构体和指针功能要求:通讯录信息生成,存储,查询,修改,插入,删除,打印等.四、设计思路1.通讯录的主要信息包括:编号,姓名,性别,联系电话.住址,邮编.2.用结构体数组来存储信息,有Data_Input函数来实现信息的录入,用Data_Show函数来显示打印信息,用Data_Sreach函数来查找信息,用Data_Insert函数来插入信息,用Data_Alter 函数来修改信息,用Data_Delete函数来删除信息,用Data_Save函数来保存信息,用Exit函数来退出通讯录.3.小组分工,每个人分配几个函数,按情况进行分配任务.五、程序代码#include<string.h>/*字符函数和字符串函数*/#include<conio.h>/*字符模式函数(调用getch()函数)*/#include<stdio.h>/*输入输出函数*/int i;struct friend/*电子通讯录结构定义*/{char num[5]; /*编号*/char name[11]; /*名字*/char sex[2]; /*性别*/char phone[12]; /*电话*/char address[26]; /*地址*/char post_num[11]; /*邮编*/}friends[50];FILE *fp;void Data_load() /*数据载入函数*/{int j;fp=fopen("friend.txt","r+"); /*打开文件friend.txt*/if(fp==NULL) /*判断是否存在friend.txt,如果不存在则创建*/{ fp=fopen("friend.txt","w");i=0;}else{for(i=0;i<50;i++){ j=fgetc(fp);if(j==EOF) /*判断是否到了文件尾*/return;fseek(fp,i*sizeof(struct friend),0);fread(&friends[i],sizeof(struct friend),1,fp); /*从文件中读取一条记录*/ }}}void Menu_Select() /*显示菜单界面*/{printf(" \n");printf(" \n");printf(" \n");printf(" Address Book Management System \n");printf(" \n");printf(" ======================\n");printf(" 1.Address book data Entry\n"); /*数据输入*/ printf(" 2.Address Book data Show\n"); /*数据显示*/ printf(" 3.Address Book data Search\n"); /*数据查找*/ printf(" 4.Address Book data Alter\n"); /*数据修改*/ printf(" 5.Address Book data Insert\n"); /*数据插入*/ printf(" 6.Address Book data Delete\n"); /*数据删除*/ printf(" 7.Address Book data Save\n"); /*数据保存*/ printf(" 0.Exit\n"); /*退出*/ printf(" ======================\n");printf( " Please chioce 0-7 \n\n");}int Data_check(int k,char ID[5]) /*检查通讯录中是否存在相同ID或ID输入格式错误*/ {int j;if(ID[0]=='0')k=1;for(j=0;ID[j]!='\0';j++){if(ID[j]>'9'||ID[j]<'0')k++;}for(j=0;j<i+1;j++){if(strcmp(ID,friends[j].num)==0)k++;}return k;}void Data_Input() /*数据输入函数*/ {char yes_no='1';char ID[5];int k=0;if(i>=50)printf("\n\n Storage full!\n\n");if(i<50){printf("************************************************************************\n"); printf(" ******************* Add Address Book Information***********************\n");printf("************************************************************************\n"); printf("************************************************************************\n");}for(;i<50;i++){do{switch(yes_no){case'1': /*如果输入为'1',则进行数据输入*/ printf(" ****** No.(4) Name(10) Sex(M/F) Phone(11) Address(25)Zip_Code(10)*******\n");scanf("%s%s%s%s%s%s",ID,friends[i].name,friends[i].sex,friends[i].phone,friends [i].address,friends[i].post_num);Data_check(k,ID);while(Data_check(k,ID)>0) /*检查输入的ID是否已存在,如果存在重新输入*/ {printf("The No. already exists Or The No. isn't correct, please re-enter\n");scanf("%s",ID);Data_check(k,ID);}strcpy(friends[i].num,ID);if(i<49){printf("\n\n Whether to be continue? Y(1)/N(0) \n\n");yes_no=getch();}if(i>=49)printf("\n\n Storage full!\n\n");break;case'0':break;default:yes_no=getch();}}while(yes_no!='1'&&yes_no!='0'); /*如果输入的不是'1'或'0'则重新输入*/ if(yes_no=='0') /*如果输入'0'则退出输入函数*/{i++;break;}}}int The_Size(char a[],char b[]) /*比较两个ID的大小*/ {int j,t;if((j=strlen(a)-strlen(b))>0) t=1;if((j=strlen(a)-strlen(b))<0) t=-1;if((j=strlen(a)-strlen(b))==0){if(strcmp(a,b)>0) t=1;if(strcmp(a,b)<0) t=-1;if(strcmp(a,b)==0) t=0;}return t;}void Data_Show() /*数据输出函数*/ {int j,k;char m;struct friend t;printf("********************************************************************\n");printf(" No. Name Sex Phone AddressZip_Code \n");printf("********************************************************************\n");for(j=0;j<i-1;j++) /*对数据进行排序*/ {for(k=0;k<i-1-j;k++){if(The_Size(friends[k].num,friends[k+1].num)==1){t=friends[k];friends[k]=friends[k+1];friends[k+1]=t;}}}for(j=0;j<i;j++) /*数据输出*/{printf("%4s %10s %4s %11s %20s %10s\n",friends[j].num,friends[j].name,friends[j ].sex,friends[j].phone,friends[j].address,friends[j].post_num);m=getch();if(m==’’)break;}printf("\n\n There are %d data in the book .\n\n",i); }void Data_Search() /*数据查找函数*/{char k;int j,a,b;char ID[5];char NAME[11];printf("Search by No. : 1\n");printf("Search by name : 2\n");k=getch();switch(k){case'1': /*按ID查找*/a=0;printf("\n\n Please enter the No.\n\n");scanf("%s",ID);for(j=0;j<i+1;j++){if(strcmp(ID,friends[j].num)==0){a++;printf(" No. Name Sex Phone Address Zip_Code \n");printf("%4s %10s %4s %11s %20s %10s\n",friends[j].num,friends[j].name,frien ds[j].sex,friends[j].phone,friends[j].address,friends[j].post_num);}}if(a==0)printf(" Do not have to find the No.!\n\n");break;case'2': /*按姓名查找*/b=0;printf("\n\n Please enter the Name\n\n");scanf("%s",NAME);for(j=0;j<i+1;j++){if(strcmp(NAME,friends[j].name)==0){b++;printf(" No. Name Sex Phone Address Zip_Code \n");printf("%4s %10s %4s %11s %20s %10s\n",friends[j].num,friends[j].name,friends[j ].sex,friends[j].phone,friends[j].address,friends[j].post_num);}}if(b==0)printf(" Do not have to find the Name!\n\n");break;default:printf("\n\n Error!\n");break;}}void Data_Insert() /*数据插入函数*/{if(i>=50)printf("\n\n Storage full!\n\n");if(i<50){char ID[5];int k=0;printf("Please enter the No. that you want to insert.\n");scanf("%s",ID);Data_check(k,ID);printf("%d",Data_check(k,ID)); /*检查所需插入的ID是否已存在,如果存在重新输入*/while(Data_check(k,ID)>0){printf("The No. already exists Or The No. isn't correct, pleasere-enter\n");scanf("%s",ID);Data_check(k,ID);}strcpy(friends[i].num,ID); /*插入数据*/ printf(" ****** Name(10) Sex(M/F) Phone(11) Address(30)Zip_Code(10)*******\n");scanf("%s%s%s%s%s",friends[i].name,friends[i].sex,friends[i].phone,friends[i].a ddress,friends[i].post_num);i++;}}void Data_Delete() /*数据删除函数*/{int k,t=0;char ID[5];printf("\n\n Please enter the No. need to be deleted\n\n");scanf("%s",ID);for(k=0;k<i;k++){if(strcmp(friends[k].num,ID)==0){t++;break;}}if(t==0)printf("\n\n The No. does not Exist!\n\n");if(t>0){for(;k<i;k++) /*删除位置前的元素顺序前移*/{friends[k]=friends[k+1];}printf("\n\n Delete success!\n\n");i=i-1;}}void Data_Alter() /*修改函数*/{int k,t=0;char ID[5];printf("\n\n Please enter the No. to be Amended\n\n");scanf("%s",ID);for(k=0;k<i;k++){if(strcmp(friends[k].num,ID)==0){t++;break;}}if(t==0)printf("\n\n The No. does not Exist!\n\n");if(t>0){strcpy(friends[k].num,ID);printf(" ****** Name(10) Sex(M/F) Phone(11) Address(30)Zip_Code(10)*******\n");scanf("%s%s%s%s%s",friends[k].name,friends[k].sex,friends[k].phone,friends[k].a ddress,friends[k].post_num);printf("\n\n Alter Success!\n\n");}}void Data_Save() /*数据保存函数*/{int j;fp=fopen("friend.txt","w");for(j=0;j<=i-1;j++){fwrite(&friends[j],sizeof(struct friend),1,fp);}printf("\n\n Save Success!\n\n");}void Exit() /*退出函数*/{char flag;printf(" Save or Not? (Y/N)\n"); /*判断是否保存*/do{flag=getch();switch(flag){case'Y': /*保存*/Data_Save();break;case'y': /*保存*/Data_Save();break;case'N':break;case'n':break;}}while(flag!='Y'&&flag!='y'&&flag!='N'&&flag!='n');}void main(){char choose,yes_no;Data_load();do{Menu_Select();choose=getch();switch(choose){case'1': Data_Input(); break; /*输入*/case'2': Data_Show(); break; /*显示*/case'3': Data_Search(); break; /*查找*/case'4': Data_Alter(); break; /*修改*/case'5': Data_Insert(); break; /*插入*/case'6': Data_Delete(); break; /*删除*/case'7': Data_Save(); break; /*保存*/case'0': Exit(); break; /*退出*/default : printf(" Error!\n");}if(choose=='0')break;printf(" Would you like to be continue? (Y/N)\n");do{yes_no=getch();}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');if(yes_no=='N'||yes_no=='n'){Exit();break;}}while(yes_no!='Y'||yes_no!='y');六、函数说明本人所写函数为: Data_check , Data_Input, The_Size, Data_Show,main.以下为各函数的功能说明,代码以及流程图:Data_check:本函数的功能是判断输入的编号是否以存在及格式是否正确.首先定义一个整型形参,一个字符数组形参.首先判断编号的首位是否为0,如果为0则整型形参赋值为1.反之没有动作,然后判断编号内是否含义字母及其他字符,如果有则整型形参自增,反之没有动作,在使用strcmp判断输入的编号在原文件中是否以存在,如果存在则整型形参自增.最后返回整型形参的值.源代码:/*检查通讯录中是否存在相同ID或ID输入格式错误*/int Data_check(int k,char ID[5]){int j;if(ID[0]=='0')k=1;for(j=0;ID[j]!='\0';j++){if(ID[j]>'9'||ID[j]<'0')k++;}for(j=0;j<i+1;j++){if(strcmp(ID,friends[j].num)==0)k++;}return k;}流程图:Data_Input:首先判断储存是否已满,如果满了,则提示是否回到主菜单,如果没满,则提输入信息,然后调用Data_check函数,判断编号是否已经存在以及格式是否正确.如果均无误则提示是否继续输入信息,反之则重新输入编号直到编号无误为止.如果输入信息后,储存变满,则提示储存已满,不再提示是否继续输入.最后提示是否回到主菜单.源代码:void Data_Input() /*数据输入函数*/{char yes_no='1';char ID[5];int k=0;if(i>=50)printf("\n\n Storage full!\n\n");if(i<50){printf("************************************************************************\n"); printf(" ******************* Add Address Book Information***********************\n");printf("************************************************************************\n"); printf("************************************************************************\n");}for(;i<50;i++){do{switch(yes_no){case '1': /*如果输入为'1',则进行数据输入*/printf(" ****** No.(4) Name(10) Sex(M/F) Phone(11) Address(25)Zip_Code(10)*******\n");scanf("%s%s%s%s%s%s",ID,friends[i].name,friends[i].sex,friends[i].phone,friends [i].address,friends[i].post_num);Data_check(k,ID);while(Data_check(k,ID)>0) /*检查输入的ID是否已存在,如果存在重新输入*/{printf("The No. already exists Or The No. isn't correct, please re-enter\n");scanf("%s",ID);Data_check(k,ID);}strcpy(friends[i].num,ID);if(i<49){printf("\n\n Whether to be continue? Y(1)/N(0) \n\n");yes_no=getch();}if(i>=49)printf("\n\n Storage full!\n\n");break;case '0':break;default:yes_no=getch();}}while(yes_no!='1'&&yes_no!='0'); /*如果输入的不是'1'或'0'则重新输入*/ if(yes_no=='0') /*如果输入'0'则退出输入函数*/{i++;break;}}}流程图:The_Size:首先定义两个字符数组形参,一个整型变量.首先利用strlen比较两个字符数组的长度,如果前者长于后者,整型变量赋值为1如果前者短于后者,整型变量赋值为-1,如果两者长度相等,则再利用strcmp比较两个字符数组的大小,如果前者大于后者,则整型变量赋值为1,如果前者小于后者,则整型变量赋值为-1,如果两者大小相等,则整型变量赋值为0.最后返回整型变量的值.源代码:int The_Size(char a[],char b[]) /*比较两个ID的大小*/{int j,t;if((j=strlen(a)-strlen(b))>0) t=1;if((j=strlen(a)-strlen(b))<0) t=-1;if((j=strlen(a)-strlen(b))==0){ if(strcmp(a,b)>0) t=1;if(strcmp(a,b)<0) t=-1;if(strcmp(a,b)==0) t=0;}return t; }流程图:Data_Show:首先调用The_Size函数再利用冒泡法对通讯录的信息根据编号进行排列.然后再对信息进行输出,输出完一条信息后按空格停止打印,按其他任意键继续打印下一条.然后输出通讯录中信息的条数,最后提示是否回到主菜单源代码:void Data_Show() /*数据输出函数*/{ int j,k;char m;struct friend t;printf("********************************************************************\n");printf(" No. Name Sex Phone Address Zip_Code \n");printf("********************************************************************\n");for(j=0;j<i-1;j++) /*对数据进行排序*/{ for(k=0;k<i-1-j;k++){ if(The_Size(friends[k].num,friends[k+1].num)==1){ t=friends[k];friends[k]=friends[k+1];friends[k+1]=t;}}}for(j=0;j<i;j++) /*数据输出*/{ printf("%4s %10s %4s %11s %20s %10s\n",friends[j].num,friends[j].name,frien ds[j].sex,friends[j].phone,friends[j].address,friends[j].post_num);m=getch();if(m==' ')break;}printf("\n\n There are %d data in the book .\n\n",i);} 流程图:main:调用Menu_Selec函数打印出主菜单.利用switch实现对菜单功能的选择.利用do-while来实现功能选择是输入不正确的纠错.源代码:void main(){char choose,yes_no;Data_load();do{Menu_Select();choose=getch();switch(choose){case'1': Data_Input(); break; /*输入*/case'2': Data_Show(); break; /*显示*/case'3': Data_Search(); break; /*查找*/case'4': Data_Alter(); break; /*修改*/case'5': Data_Insert(); break; /*插入*/case'6': Data_Delete(); break; /*删除*/case'7': Data_Save(); break; /*保存*/case'0': Exit(); break; /*退出*/default : printf(" Error!\n");}if(choose=='0')break;printf(" Would you like to be continue? (Y/N)\n");do{yes_no=getch();}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');if(yes_no=='N'||yes_no=='n'){Exit();break;}}while(yes_no!='Y'||yes_no!='y');流程图:七、程序调试1.启动程序2.输入数据3.显示数据4.查找数据5.修改数据6.插入数据7.删除数据8.保存数据9.退出八、实验心得C语言是国内外广泛使用的计算机语言,学会、学好、使用C语言进行程序设计是时代的要求,也是计算机工作者的一项基本功。

个人通讯录管理系统(VFP)

个人通讯录管理系统(VFP)

数据库原理课程设计系别:计算机与信息工程系班级:05(2)学号:*********姓名:***题目:个人通讯录管理系统指导教师:**摘要日益繁多的人际交往使得我们很难搞清楚与每个人之间的联系方式,特别是对于做经常出差的人来说更是难,所以通讯录能够便捷的给我们带来所需要的相关信息。

而随着计算机的普及,人们的生活摆脱了传统式的记事本、电话簿,越来越多的靠计算机来帮助人们记住这些事情,极其简便。

这就需要有一个使用的通讯录管理系统,用户可以方便的通过自己电脑的通讯录管理系统,来随时查阅自己所需要的信息,而不必再大费周折去翻开那繁琐的记事本。

通讯录管理系统是一个专门针对储存用户联系方式以及一些简单个人信息的实用管理系统,它方便了用户对众多客户、朋友、同事等个人信息的储存和快速查阅的功能,大大减少了查找过程的时间。

第一部分1.1设计构思通讯录管理系统功能需求分析:通讯录管理系统主要功能分为三个模块:用户登录、系统维护以用户登录:用户可通过用户名和密码登录。

系统维护:包括对信息添加、删除、查找、修改,修改密码等操作1.2系统数据流图:1.3功能结构图:1.4通用户部分功能图:1.5开发及运行环境:本系统开发平台及运行环境如下:系统开发平台:Microsoft Visual FoxPro运行平台:Windows XP (SP2) / Windows2000 (SP4) / Windows Server 2003 (SP1)分辨率: 最佳效果 1024×768 像素第二部分详细设计:2.1.1界面设计如图2.1.2提供登陆通道,任何未登陆者不能对通讯录上的内容进行一系列的操作。

2.1.3提供“浏览”、“添加记录”“修改”“删除”等功能。

2.2设计思想2.2.1界面主要由登陆区、主窗口组成。

登陆区是由用户名、密码两个文本框和“确定”、“取消”两个命令按扭组成。

“确定”按钮的代码如下:IF ALLTRIM(thisform.txtUserName.V alue) == ''MessageBox("请输入用户名")RETURNENDIFIF ALLTRIM(thisform.txtUserPwd.V alue) == ''MessageBox("请输入密码")RETURNENDIFSELECT 用户表&&查找指定用户名为的记录Locate For Allt(用户名)=Allt(thisform.txtUserName.V alue)If Found() == .T. &&如果找到If Allt(密码) == Allt(thisform.txtUserPwd.Value) &&比较密码,成功则进入MessageBox("欢迎光临", 64, "提示信息")UserName = 用户名UserType = 用户类型release thisformElse &&比较密码不成功MessageBox("密码不正确", 16, "错误提示")EndifElse &&没有找到指定用户MessageBox("用户名不存在", 16, "错误提示")Endif取消按钮的代码如下:RELEASE thisformON SHUTDOWN Do OnQuitquit2.2.2系统界面主要由王五个菜单项构成,分别是文件(只含退出命令)、用户密码修改、数据(浏览,添加记录,修改,删除)、查询(按姓名查询,按住址查询,按联系方式查询)、帮助。

电子通讯录

电子通讯录

目录1 技术要求 (1)2 基本功能描述 (1)3 设计思路 (2)3.1 添加功能 (2)3.2 删除功能 (3)3.3 修改功能 (3)3.4 查询功能 (4)3.5数据库访问接口ODBC (4)4 软件设计 (4)4.1 设计步骤 (4)4.2 界面设计 (7)4.3 关键功能的实现 (8)4.3.1 添加功能 (8)4.3.2 删除功能 (8)4.3.3 修改功能 (9)4.3.4 查询功能 (9)4.3.5 添加用户及权限设置 (10)5 心得与体会 (10)6 参考文献 (11)7 附录 (11)7.1 调试报告 (11)7.2 测试结果 (12)7.3 关键源代码 (15)电子通讯录的实现1 技术要求(1)能创建、修改和增删学生通讯录1)创建功能:能够轻松地录入一个朋友的姓名、性别、出生日期、通讯地址、电话号码、QQ号码等信息;2)浏览功能:显示通讯录的全部信息;3)追加功能:在原有数据资料的基础上按顺序增加记录,可以一次完成若干条信息的输入;4)删除功能:按照记录的ID或姓名等删除通讯信息。

这一步首先根据输入的删除内容在电子通讯录里查找记录,给出提示信息。

若找到记录,提示是否删除,确定执行删除后,显示通讯录的内容;若没有找到,则提示无此人。

5)查找功能:给出姓名,查找该记录并显示该人的信息。

6)插入功能:给出插入位置,执行插入后,查询是否被插入,显示通讯录的内容;7)排序功能:根据姓名对通讯录进行升序排列。

应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观。

(2)能够按多种方式进行查询:查询时请分别使用折半查找法和顺序查找法进行查找。

(3) 应用MFC创建基于对话框的Windows应用程序,设计友好方便的图形用户界面2 基本功能描述电子通讯录是一个小的信息系统,通讯信息包括姓名、性别、出生日期、通讯地址、电话号码、QQ号码等,具有浏览信息,追加记录,删除记录,查询记录,修改记录等功能。

通讯录管理系统数据库课程设计

通讯录管理系统数据库课程设计

通讯录管理系统数据库课程设计一、课程设计背景随着互联网和智能手机的普及,通讯录成为人们日常生活中不可或缺的一部分。

而对于企业和组织来说,通讯录更是必不可少的管理工具。

为了提高学生对数据库课程的实际应用能力,本课程设计旨在设计一个通讯录管理系统数据库,作为学生课程设计的项目,帮助学生深入理解数据库的概念和操作。

二、课程设计目标本课程设计的目标是让学生通过实际设计一个通讯录管理系统数据库,掌握数据库设计的基本原理和方法,包括数据库的规范化、关系模式的设计、SQL语言的应用等方面的知识。

通过完成课程设计,学生将能够提高解决问题的能力,锻炼团队合作和交流能力。

三、课程设计内容1. 系统需求分析1.1 确定系统的功能和性能需求1.2 确定系统的使用环境和用户特点2. 数据库设计2.1 确定数据库的实体和关系2.2 设计数据库的表结构和约束条件2.3 进行数据库规范化设计3. 系统实现3.1 使用MySQL或Oracle等数据库管理系统搭建数据库3.2 使用Java、C#等编程语言编写系统的界面和逻辑代码3.3 实现系统的基本功能,包括添加通信人、编辑通信人信息、查找通信人、删除通信人等功能4. 系统测试4.1 对系统进行功能测试和性能测试4.2 修复系统中出现的bug和问题5. 系统部署5.1 部署系统到本地服务器或云服务器5.2 进行系统的上线和维护四、课程设计流程1. 分组确定课程设计题目学生按照班级和兴趣分组,确定课程设计的具体题目和要求。

2. 系统需求分析学生对系统的功能和性能需求进行分析,编写系统需求规格说明书。

3. 数据库设计学生根据系统需求规格,设计系统的数据库结构和约束条件,完成数据库设计文档。

4. 系统实现学生根据数据库设计文档,使用相应的数据库管理系统搭建数据库,编写系统的界面和逻辑代码。

5. 系统测试学生对系统进行功能测试和性能测试,并记录测试结果,修复系统中出现的bug和问题。

6. 系统部署学生将完成的系统部署到本地服务器或云服务器,并进行上线和维护。

集团电话解决方案

集团电话解决方案
集团电话解决方案
第1篇
集团电话解决方案
一、背景分析
随着我国经济的快速发展,企业规模不断扩大,集团内部通讯需求日益增长。为提高工作效率,降低沟通成本,搭建一套稳定、高效、安全的集团电话系统显得尤为重要。本方案将结合我国法律法规及行业最佳实践,为贵集团提供一套合法合规的电话构之间的免费通话,降低通讯成本。
4.提供决策支持,助力集团战略规划和业务发展。
本方案经过严谨设计,力求为贵集团提供一套全面、高效、安全的电话解决方案。如有任何疑问或需要进一步讨论,请随时联系。期待与您的合作,共同推动集团通信系统的升级与发展。
-实施严格的权限控制,防止未授权访问。
-定期进行系统安全评估和漏洞扫描,确保系统安全。
5.录音与报表
-自动记录所有通话,提供便捷的检索和播放工具。
-生成详细的通话报表,按需定制统计维度。
6.扩展性
-构建模块化系统架构,便于未来升级和扩展新功能。
-支持与其他企业系统的集成,提升业务协同效率。
四、实施计划
1.降低通讯成本,提高工作效率;
2.提升集团内部沟通便捷性,促进业务协同;
3.增强集团信息安全,防止信息泄露;
4.为集团决策提供数据支持,助力企业持续发展。
本方案旨在为贵集团提供一套合法合规、高效稳定的电话解决方案,如有未尽事宜,敬请指正。感谢您的信任与支持!
第2篇
集团电话解决方案
一、引言
随着企业规模的扩大和业务流程的复杂化,高效的通信系统成为集团运作的重要支撑。本方案旨在为贵集团构建一套符合法规、高效可靠、具备扩展性的电话解决方案,以满足当前及未来业务发展的需求。
(3)支持手机、座机等多种终端接入,满足不同场景需求。
3.通讯录管理

通讯录设计63219

通讯录设计63219

多用户通讯录一、选题意义随着计算机的普及,人们一系列的日常生活和工作方式都开始走向信息化,例如无纸化办公、电子商务、电子政务等.多用户通讯录系统的实现也是信息化的一个体现,它代替了传统的通讯录、电话本,实现了多个用户能够在网上建立各自的通讯录,互不干扰,并且可以按照类别将联系人分成同学、同事等多个组,使得查询和管理非常方便。

二、系统功能概述根据功能要求,设计多用户通讯录系统的功能模块及结构如图:各模块的功能如下:1)用户登录模块根据用户输入的账号和密码判断该用户是否合法以及是否为管理员,并根据级别进行“用户管理"模块的授权。

2)用户注册模块对于新用户的注册,注册成功的用户将自动登录系统。

新注册的用户默认为普通用户,不能使用“用户管理”模块。

3)通讯录模块包括三个子模块:查询搜索子模块、联系人管理子模块、分类管理子模块。

(1)查询搜索子模块:能够根据用户自行设计的分类查询联系人,能根据姓名、住址等字段进行分类查询联系人(2)联系人管理子模块:用户可以根据自己的联系人查询详情、添加、修改和删除操作。

(3)分类管理子模块:用户可以管理自己的联系人分类,包括添加、修改和删除分类。

4)我的资料模块用户可以查看和修改自己的资料。

5)用户管理模块管理员登录后可以查看用户的详细资料和删除用户。

6)退出系统结束用户在登录模块获得的session变量,退出系统,返回登录页面。

三、系统设计说明1、数据库设计系统可采用SQL SERVER或ACCESS类型的数据库作为后台支持数据库,根据功能的需要建立适合的数据表。

2、功能设计根据以上的功能概述,设计程序,可以根据自己的需要增加和完善一些功能和服务。

四、开发环境前台开发工具可以利用所学的任何一种语言,比如VB、PB、ASP、VC、Java等等,后台数据库可以选用所学的任何数据库比如Access、SQL、ASA(PB自带的)等等。

五、时间安排(4周)六、写出毕业设计报告书(论文)论文必须包括以下内容:1)该设计的摘要2)设计的需求分析3)设计的目的4)程序主要源代码及其说明5)程序运行的结果6)毕业设计的收获、感想以及体会7)参考文献七、设计成绩评定设计成绩是依据学生在设计中的表现和设计成果综合评定,包括:1)设计纪律(20%):根据设计出勤情况、遵守纪律和服从管理情况、以及设计态度等因素评定;如有严重纪律问题,可按学校有关规定直接评为不及格;2)设计报告书的完成质量(40%):设计报告书的完成情况;3)系统的运行效果以及答辩情况(40%):根据设计实际完成的质量而考核。

2.1总体要求

2.1总体要求

2.1总体要求系统要求采用IBM的群件系统Lotus Domino/Notes构建,结合XML、JAVA等新技术,采用B/S模式,结合采购人实际应用特点搭建一个集工作协同、个人办公、公共信息、公文管理、会议管理、文档管理、后勤管理、应用集成等功能于一体的综合办公管理平台。

2.2技术要求2.2.1、先进性(1)系统具有高的技术先进性、稳定性、可靠性和扩展性;(2)系统要求支持门户应用,能够自由挂接其他信息管理系统,实现不同系统间用户的单一登陆,并提供单位、部门和个人等多种门户自定义功能;(3)系统应当充分考虑对长期使用后产生的海量数据的利用和管理,并对海量数据条件下系统的运行性能有明确有效的技术保障,必须采用“双库结构”设计,以保证系统长期高效运行;(4)系统要求采用B/S结构的“图形化”工作流管理系统,通过简单的图形拖、拉操作,便可以设计各种复杂的业务流程;(5)对于流转过程中的工作,要求可以采用图形化方式对流转过程进行动态跟踪监控。

2.2.2、扩展性(1)系统具有严谨、统一的系统规划和架构,设计、编码、命名、风格等必须统一、规范;(2)系统模块间具有开放的标准化接口,便于系统的模块扩展升级;(3)系统必须提供基于WEB的应用扩展设计工具,包括便捷的树型导航器设计、文件夹的权限级别、显示格局、显示内容、排列规则、操作动作以及应用模块间文件夹的引用、集成等设计,用户单位可以根据发展需要,无需编码便可自由拓展应用。

2.2.3、安全性·支持CA验证机制;·支持 SSL V3技术,保证数据在传输过程的安全性;·采用USB身份认证锁对重要用户进行登陆验证,保证重要用户审批文件的实效性;·采用电子签名技术,支持对Word/Excel、Html页面的签章/手写签名,保证重要用户审批文件的实效性·提供对登录用户的唯一性判断;·提供限次登录功能;·提供系统日志功能,用于记录Web用户的在线信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.需求分析说明 (1)1.通讯录总体功能要求: (1)2. 各功能模块的功能描述: (1)二.概要设计说明 (3)1.模块调用图: (3)2.各函数简要说明: (3)三.详细设计说明 (4)1.数据结构设计 (4)2.主函数模块 (5)3.密码验证模块 (5)4.输入信息模块 (6)5. 显示信息模块 (7)6.查找模块 (7)7.修改信息模块 (7)8.删除信息模块 (8)9. 信息加载 (8)10.存盘模块 (8)11. 密码修改模块 (8)四.调试分析 (9)1.问题一 (9)2.问题二 (9)3.问题三 (9)五.用户使用说明 (10)六.课程设计总结 (16)七.测试结果 (17)1.测试密码登陆 (17)2.测试输入信息 (17)3.测试显示信息 (18)4.测试查找信息 (18)5.测试修改信息 (19)6.测试删除信息 (19)7.测试加载信息 (20)8.测试存盘 (21)9.测试密码修改 (22)参考书目 (23)附录 (24)一.需求分析说明1.通讯录总体功能要求:在window7系统下用vc6.0开发工具以双向链表作数据结构,编写一个通讯录管理系统。

每条信息包含:姓名(name )街道(street)城市(city)邮编(eip)电话(tel)国家(state)。

此系统具有友好的界面和较强的容错能力。

本系统具有以下几方面的功能:(1).密码验证passWord():通过密码登陆本系统。

(2).输入信息enter():通过键盘输入所需添加信息。

(3).显示信息display( ):显示所有通讯录信息。

(4).查找search( ):以名字为关键字查找用户信息。

(5).修改modify():修改指定的信息。

(6).删除信息del ( ):用户通过输入指定名字找到相关记录然后确定是否删除。

(7).存盘save ( ):把所有用户通过键盘录入的信息或者通过文件加载的信息以文本文件存入硬盘。

(8).装入load( ) :从文本文件加载通讯录信息。

(9).密码修改modpw():由用户自己修改为指定的密码。

2. 各功能模块的功能描述:(1)主函数模块:本模块的主要功能是初始化各种数据,根据用户选择的数字调用对应的模块,实现相应的功能。

(2) 密码验证模块:本模块主要功能是接受用户键入的密码字符,读取已经存好的密码文件,解密后与之比较。

(3)输入信息模块:本模块的主要功能是通过用户再键盘上键入的相关信息存入一个结构体中,然后再把这个结构体作为一个节点加入到双向链表中。

(4)显示信息模块:本模块的主要功能是显示所有在双向链表节点的信息,打印在屏幕上。

(5)查找模块:本模块的主要功能通过用户输入的用户名然后在双向链表中遍历所有的节点看是否有对应的节点,有的话把这个节点的所有信息打印到屏幕上。

(6) 修改信息模块:本模块首先调用查询模块找到相对应的节点,然后由用户选择修改哪项信息。

(7)删除信息模块:本模块首先调用查询模块找到相对应的节点,然后由用户确定是否删除此信息。

(8) 信息加载模块:本模块的是通过吧txl.txt文件中的信息加载到内存中。

(9)存盘模块:本模块的主要功能是把当前双向链表中的所有的节点数据以一个名为txl.txt的文本文件存到与本程序同一文件夹的目录下。

(10)密码修改模块:本模块实现了接受用户新键入的密码字符,然后吧密码字符加密后存入以passWord.txt为文件名的文本文件。

二.概要设计说明1.模块调用图:2.各函数简要说明:int passWord(char *pw) //密码验证txlnode * enter(txlnode *pp,txlnode *head) //信息输入void display(txlnode *head) //显示所有数据txlnode * search2(txlnode *head) //查找通讯录信息(供修改信息和删除信息模块调用)void search(txlnode *head) //查找信息供主函数调用void modify(txlnode *head) //修改信息txlnode * del(txlnode *head) //删除信息txlnode * load(txlnode *pp,txlnode *head) //加载文件void save(txlnode *head) //保存信息int modpw(void) //修改密码三.详细设计说明1.数据结构设计数据结构的设计是具体模块设计的前提。

此处使用循环双向链表来表示通讯录结点。

所谓循环双向链表,是指在单链表的基础上增加一个指针域,使该结点数据域左边的指针指向该结点前面的结点,右边的指针指向其后的结点,最后一个结点的右边指针指向第一个结点。

typedef struct txl //建立通讯录信息结构体{char name[20];char street[32];char city[20];char eip[20];char tel[20]char state[20];}txld; typedef struct dlnode //建立双向链表结构体{txld data;struct dlnode *prior;struct dlnode *next;}txlnode;此处首先定义了结构体txld包含了通讯录的所有信息,然后以这些信息为数据域建立一个双向链表,该链表包含前去指针prior和后继指针next。

2.主函数模块首先定义头结点,为头结点分配一块内存空间,然后调用是接受用户输入的密码调用passWord函数验证密码是否正确正确的话打印出功能菜单选项,运用swith 语句,用户通过选择指定项从而进入相应的功能执行完此项功能后返回,循环显示功能菜单和接受用户的选项,从而在不退出程序的情况下重复使用本系统的各项功能。

(具体实现见附录main函数(P32))。

3.密码验证模块在主函数中通过getchar()得到用户的密码,主函数吧这个参数传递到密码验证模块passWord(),密码验证模块通过读取password.txt中的密文存入数组a[i]中数组中的每一个字符依次通过a[i]-=i%5; a[i]+=i%3; a[i]+=i%2; a[i]++;解密之后与用户输入的字符串进行比较,如果相同则密码正确否则密码错误,当错误次数超过三次后程序自动结束运行。

(具体实现见附录passWord函数(P24))。

4.输入信息模块这个模块由txlnode * enter(txlnode *pp,txlnode *head)实现,形参是两个txlnode结构体指针返回的也是一个txlnode结构体指针,其中形参txlnode *pp 对应的实参是txlnode *p,指针p是指向双向链表的最后一个节点。

形参txlnode *head对应的实参就是在主函数中建立的头结点。

输入模块通过p=(txlnode *)malloc(sizeof(txlnode)); 来申请一块结构体内存空间,再接受用户的输入信息,把相关信息存入结构体中,其中包含的内容有:名字(name),街道(street),城市(city),邮编(eip),电话(tel),国家(state)。

最后把这个结构体作为一个节点从最后插入到双向链表中。

至此链表中增加了一个节点,再询问用户是否继续输入,如继续则重复以上工作,否则返回主模块。

(具体实现见附录enter函数(P25))。

流程图:5. 显示信息模块这个模块由void display(txlnode *head)实现,它首先接受主模块传来的头结点指针,再根据头结点指针找到下一节点,找到后输出节点上的信息包括名字(name),街道(street),城市(city),邮编(eip),电话(tel),国家(state),如果找到的额几点不是头结点则继续上述步骤,否则返回主模块(具体实现见附录display函数(P25))。

6.查找模块这个模块由void search(txlnode *head)实现,这个函数首先接受实参的传来的头节点指针,然后根据指针域找到下个节点,再把节点的中的name与用户输入的字符串相比较,如果不同则继续查找下一节点,找到则输出名字(name),街道(street),城市(city),邮编(eip),电话(tel),国家(state)否则直到回到头结点后输出没有查到此记录,然后回到主函数(具体实现见附录search函数(P26))。

7.修改信息模块这个模块由void modify(txlnode *head)实现,此函数接收主函数传递来的头节点指针,用户以名字为关键字查找姓名,void modify(txlnode *head)函数调用查找函数txlnode * search2(txlnode *head),将查找到的节点指针返回,然后此模块再根据返回的节点提示修改的项目:1名字,2街道,3城市,4邮编,5电话,6国家,根据用户的选择修改相应的项目(具体实现见附录modify函数(P27))。

8.删除信息模块这个模块由txlnode * del(txlnode *pp,txlnode *head)实现,函数中的形参有一个尾指针和一个头结点指针,这个函数通过调用txlnode * search2(txlnode *head),找到相应的节点,然后把这个节点在本双向链表中删除,如果删除的是最后一个节点即尾节点则将指向新的尾节点的指针返回,否则返回原尾指针(具体实现见附录del函数(P28))。

9. 信息加载这个模块由txlnode * load(txlnode *pp,txlnode *head)实现,函数中的形参有一个尾指针和一个头结点指针,其中头结点指针指向从文件中加载第一个节点,后面的节点从文件中一次添加,信息加载完毕后返回最后一个节点的指针(具体实现见附录load函数(P29))。

10.存盘模块这个模块由void save(txlnode *head)实现,函数中中接受的形参是一个指向头结点的指针,根据头结点依次找到后面的节点,每找到一个节点就把这节点的信息写入名为txl.txt的文件中直到回到头结点(具体实现见附录save函数(P30))。

11. 密码修改模块这个模块由int modpw(void)实现,进入函数后它首先是打开passwor.txt文件,然后获得用户的设置新密码的字符串,由于读取文件到数组的时候吧换行符也读入了,所以先去掉数组中的换行符,在依次通过a[i]+=i%5; a[i]-=i%3;a[i]-=i%2;a[i]--;加密后写入到passwor.txt文件中,操作成功后返回1否则返回0(具体实现见附录modpw函数(P31))。

相关文档
最新文档