设计通讯录管理系统

2022-10-18

第一篇:设计通讯录管理系统

C语言课程设计学生通讯录管理系统设计

一、题目内容的描述

学生通讯录管理系统设计

设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电话号码等等),通信录数据类型定义为结构体类型。由键盘输入数据(最好要考虑输入数据输入的格式及输入数据的有效性),然后进行以下的功能实现。程序要求主函数是一个功能选择菜单,其它各功能都用各自的函数实现。

功能要求如下:

1、能建立、修改和增删学生通讯录

2、能够按多种方式进行查询,例如按姓名、按电话号码等。

3、通讯录的数据保存在文件中,运行程序时将通讯录数据从文件读取到内存中。对通讯录进行增加、删除、修改学生数据后,提供功能菜单,可以将内存中修改过的通讯录重新保存至文件。

二、应用程序功能的详细说明

1、应用程序实现了可视化的系统操作界面。

2、对学生通讯录形成了系统化的管理,操作简便明了。

3、程序具有系统帮助,添加、显示、查询、刷新、删除、排序、保存、修改、读取学生通讯录的功能。各项功能均可按照文字提示操作,浅显易懂。

4、系统的各个功能模块都用函数的形式来实现(readfile()、seek()、modify()、sort()、insert()、del()、save()、menu())方便查看。

5.可以将信息保存在文件(“student.txt“)中,亦可将信息从文件中读取出来,灵活方便。

三、主要模块的算法描述

学生通讯录管理系统

刷新学生信息readfile()

查询学生信息seek()

增加学生信息insert()

显示学生信息display()

退出系统

修改学生信息modify()

删除学生信息del()

保存当前学生信息save()

汇总当前学生数目number()

系统帮助help()

查询学生信息

按姓名查询

退出

按学号查询

开始

以可读写的方式打开一个数据文件

将此文件的内容读出,并存入一个新的结构体类型的数组中。

调用menu()菜单函数

进入while()主循环

输入1-8中的一数值,选择相应操作。

输入是否为0

判断键值,调用相应函数,完成相应功能。

是否已对修改存盘

调用函数save()函数,进行写数据文件操作

结束

模块一:头文件,变量定义,函数的声明

对系统所使用的变量进行定义,对函数进行声明。

模块二:录入学生信息

声明函数void

readfile(),说明一个文件指针FILE

*fp打开文

件“student.txt“。

模块三:学生信息的查找

声明void

seek()为查找函数,通过switch(item)设定用学号查找,

用姓名查找两个分支。

模块四:学生信息的修改

声明void

modify()为学生信息修改函数,通过switch(item)设定

所要修改的项目。

模块五:刷新学生信息

声明void

sort()将录入学生系按升序排列,用的是“冒泡排序法”

实现排序。

模块六:增加学生信息

声明void

insert()插入学生信息,先通过判断学生是否存在,若

否则继续输入,若是则跳出,重新循环。

模块七:删除学生信息

声明void

del()实现学生信息删除,通过学号对比确定要删除的信

息,然后用后一个替换掉。

模块八:显示学生信息

通过display()函数输出学生信息。

模块九:保存信息

通过fp=fopen(“student.txt“,“w“);写入信息。

模块十:汇总学生数目

通过number()函数将已有男女生及总学生数目汇总出来。

模块十一:系统帮助

通过help()函数帮助操作。

模块十二:界面菜单

通过switch(num)调用以上各函数,实现功能。

1、程序采用模块化设计,各模块独立,可分块调试,个模块由主函数控制调用。

2、其中主要模块(readfile()、seek()、modify())都是利用数组,指针来实现数据结构设计。

3、数据库设计的任务是确定系统所需要的数据库。数据库是表的集合,通常一个系统只需一个数据库。设计人

是根据需求分析,确定数据库所包含的表及字段、表间的关系,然后具体确定表的结构,包括字段名、字段类型及宽度,需要的索引等。根据对需求得到的数据结构进行分析,按数据输入输出的要求,确定表和表间的关系,进行验证、调整、修改、完善,使其能够实现用户对数据和功能的要求。通讯信息表包括以下字段:学号,

姓名,年龄,性别,出生年月,地址,电话,

E-mail。学号为主索引。

四、结束语

我设计的程序总体功能大都能够运行顺利,但有许多地方比较复杂,需要进一步修改,进行简化。通过这次课程设计的锻炼,我收获很多,具体归纳为以下几点:

1、首先,也是最重要的一点,学会如何将一个复杂的问题简化,将一个较大的问题分成几个小问题,再一一解决这些小问题。在设计一个程序之前,要学会对程序功能进行规划,将其分为几个不同的功能模块,要思路清晰,简单易用;

2、学会灵活运用已有的知识,同时适当的拓展一些知识;比如,这次设计过程中,有一些函数以前就很少用到,甚至没有见过,但对程序的设计及用户界面的改善带来方便;

3、解决问题时,要尽可能考虑全面。每一个细节都很重要,既要避免功能的重复,也要避免功能疏漏的地方!

4、在这次课程设计过程中,参考了许多资料,发现C语言真的很有意思!比如我看到一个关于用C语言编写的小程序:五子棋、俄罗斯方块、推箱子等,等这次课程结束后,我就想利用C语言编写这些小游戏。曾经认为C是个挺枯燥的课程,现在发现这不仅仅是个简单的课程,而是个很实用的计算机工具!

五、程序源代码清单

#include

#include

#include

#define

BUFLEN

100

#define

LEN

15

#define

N

100

struct

record

{

char

code[LEN+1];

char

name[LEN+1];

int

age;

char

sex[3];

char

time[LEN+1];

char

add[30];

char

tel[LEN+1];

char

mail[30];

}stu[N];

int

k=1,n,m;

void

readfile();

void

seek();

void

modify();

void

insert();

void

del();

void

display();

void

save();

void

number();

void

menu();

int

main()

{

while(k)

menu();

system(“pause“);

return

0;

}

void

readfile()//刷新学生信息

{

char

*p=“student.txt“;

FILE

*fp;

int

i=0;

if

((fp=fopen(“student.txt“,“r“))==NULL)

{

printf(“Open

file

%s

error!

Strike

any

key

to

exit!“,p);

system(“pause“);

exit(0);

}

while(fscanf(fp,“%s

%s%d%s

%s

%s

%s

%s“,stu[i].code,stu[i].name,&stu[i].age,

stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)

{

i++;

i=i;

}

fclose(fp);

n=i;

printf(“录入完毕! “);

}

void

seek()//查询学生信息

.

.

.

.

.

.

void

modify()//修改学生信息

.

.

.

.

.

.

void

sort()//对学生信息按学号排序

{

int

i,j,*p,*q,s;

char

temp[10];

for(i=0;i

{

for(j=n-1;j>i;j--)

if(strcmp(stu[j-1].code,stu[j].code)>0)

{

strcpy(temp,stu[j-1].code);

strcpy(stu[j-1].code,stu[j].code);

strcpy(stu[j].code,temp);

strcpy(temp,stu[j-1].name);

strcpy(stu[j-1].name,stu[j].name);

strcpy(stu[j].name,temp);

strcpy(temp,stu[j-1].sex);

strcpy(stu[j-1].sex,stu[j].sex);

strcpy(stu[j].sex,temp);

strcpy(temp,stu[j-1].time);

strcpy(stu[j-1].time,stu[j].time);

strcpy(stu[j].time,temp);

strcpy(temp,stu[j-1].add);

strcpy(stu[j-1].add,stu[j].add);

strcpy(stu[j].add,temp);

strcpy(temp,stu[j-1].tel);

strcpy(stu[j-1].tel,stu[j].tel);

strcpy(stu[j].tel,temp);

strcpy(temp,stu[j-1].mail);

strcpy(stu[j-1].mail,stu[j].mail);

strcpy(stu[j].mail,temp);

p=&stu[j-1].age;

q=&stu[j].age;

s=*q;

*q=*p;

*p=s;

}

}

}

void

insert()//增加学生信息

.

.

.

.

.

.

void

display()//显示当前学生信息

{

int

i;

printf(“所有学生的信息为: “);

printf(“学生学号,

学生姓名,

年龄,

性别,

出生年月,

地址,

电话,

E-mail “);

printf(“-------------------------------------------------------------------- “);

for(i=0;i

{

printf(“%6s,

%7s,

%5d,

%5s,

%9s,

%8s,

%10s,

%14s “,stu[i].code,stu[i].name,stu[i].age,

stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);

}

}

void

save()//保存当前学生信息

{

int

i;

FILE

*fp;

fp=fopen(“student.txt“,“w“);

for(i=0;i

{

fprintf(fp,“%s,

%s,

%d,

%s,

%s,

%s,

%s,

%s “,stu[i].code,stu[i].name,stu[i].age,

stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);

}

fclose(fp);

}

void

number()//汇总学生数目

{

int

i,girl,boy=0;

for(i=0;i

if(strcmp(stu[i].sex,“1“)==0)

{boy++;}

girl=n-boy;

printf(“男生人数是:%d 女生的人数是:%d “,boy,girl);

printf(“总的学生人数为:%d“,n);

}

void

help()//系统帮助

{

printf(“输入性别时男为1,女为2“);

printf(“ 3.增加学生信息后,切记保存按7; “);

printf(“ 4.谢谢您的使用! “);

}

void

menu()//可视化的系统操作界面

{

int

num;

printf(“

学生通讯录管理系统

“);

printf(“

*********************系统功能菜单************************

“);

printf(“

--------------------------------

-------------------------------

“);

printf(“

1.刷新学生信息

2.查询学生信息

“);

printf(“

*********************************************

“);

printf(“

3.修改学生信息

4.增加学生信息

“);

printf(“

*********************************************

“);

printf(“

5.按学号删除信息

6.显示当前信息

“);

printf(“

*********************************************

“);

printf(“

7.保存当前学生信息

8.汇总学生数目

“);

printf(“

*********************************************

“);

printf(“

9.系统帮助

10.退出系统

“);

printf(“

---------------------------------

------------------------------

“);

printf(“

************************************************************

“);

printf(“请选择菜单编号:“);

scanf(“%d“,&num);

switch(num)

{

case

1:readfile();break;

case

2:seek();break;

case

3:modify();break;

case

4:insert();break;

case

5:del();break;

case

6:display();break;

case

7:save();break;

case

8:number();break;

case

9:help();break;

case

10:k=0;break;

default:printf(“请在1-10之间选择 “);

}

}

第二篇:数据结构课程设计—java通讯录管理系统

import java.io.*; import java.util.*; public class LittleProgram {

static boolean isDelete = true;

static boolean isFind = true;

public static void main(String [] args)//主方法,程序从这里开始运行

throws IOException,NumberNotFoundException

{

int choice=-1;

do{

LittleProgram lp = new LittleProgram();

System.out.println();

System.out.println("

#");

System.out.println();

System.out.println(" 通訊錄管理系统");

System.out.println("

请用号码插入,查找,修改,删除数据");

System.out.println();

System.out.println("

# ");

System.out.print("1.增加号码: "+

"2.查找号码: "+

"3.删除号码: "+ "4.清除所有号码: "+ "5.把号码全部打印到屏幕 "+ "6.把通讯录按号码排序 "+

"7.修改号码 "+

"8.统计通码讯录的总人数 "+

"9.关于作者 "+

"0.退出程序. " +

"输入:");

BufferedReader in =

//从终

new BufferedReader(

//端接

new InputStreamReader(System.in));//收数

String inputLine = in.readLine();

//字选

choice= Integer.valueOf(inputLine).intValue();//项;

switch(choice)

{

case 1: {//1.增加号码

String str = lp.inputData();

lp.addData(str);

System.out.println("增加号码成功.");

timeOut(1);

}break;

case 2: {//2.查找号码

long find = 0;

System.out.print("请输入你要查找的号码:");

BufferedReader inn =

new BufferedReader(

new InputStreamReader(System.in));

String inputLi = inn.readLine();

find = Integer.valueOf(inputLi).longValue();

lp.findData(find);

timeOut(2);

}break;

case 3: {//3.删除号码

long deleteNumber = 0;

System.out.print("请输入你想删除号码:");

BufferedReader bf =

new BufferedReader (

new InputStreamReader(System.in));

String inputL = bf.readLine();

deleteNumber = Integer.valueOf(inputL).longValue();

lp.deleteData(deleteNumber);

if(isDelete)

System.out.println("删除号码成功!");

timeOut(1);

}break;

case 4: {

lp.clearData();//4.清除所有号码

timeOut(1);

}break;

case 5: {

print();//5.把号码全部打印到屏幕

timeOut(2);

}break;

case 6: {

lp.numSort();//6.把号码按号码排序

System.out.println("按照号码从小到大排序成功! "+

"排序后: ");

print();

timeOut(2);

}break;

case 7: {

lp.rewrite();//7.修改号码

timeOut(2);

}break;

case 8: {

int count = lp.count();

System.out.println("共有"+count+"个号码记录.");

timeOut(2);

}break;

case 9: {

System.out.print(" 李雪萍 "+

" 安徽理工大學理學院 "+

" QQ:1154646392 ");

timeOut(4);

}break;

}}while (choice != 0);

System.out.println("Bye! ^-^");

System.exit(0);

}

public String inputData()//从终端接收数据的方法,返回字符串

throws IOException,NumberFormatException

{

System.out.print("请依次输入 :号码 姓名 地址 生日 " +

"每项数据请用空格隔开:");

String all = "";

try{

BufferedReader in =

//从终

new BufferedReader (

//端接

new InputStreamReader(System.in));

//收数

String inputLine = in.readLine();

//据

StringTokenizer str =

new StringTokenizer(inputLine," ");//接收的数据用空格隔开,这个类用来提取每个字符串

long num = Integer.valueOf(str.nextToken()).longValue();//号码

String name = (String)str.nextToken();

//姓名

String add = (String)str.nextToken();

// 地址

String birth = (String)str.nextToken();//出生年月

all = String.valueOf(num) +" , "+

name +" , "+

add +" , "+

String.valueOf(birth);//把所有的数据用" , "隔开然后在连起来放进字符串all

}catch (IOException e){}

catch (NumberFormatException e){}

return all;//返回字符串all

}

public void addData(String str)//增加号码的方法

throws IOException

{

String s1 ="",s2="" ,s3= "";

File file = new File("c:data.txt");

if (file.exists())//如果文件data.txt存在

{

try{

BufferedReader in =

new BufferedReader(

new FileReader(file));

while ((s1=in.readLine())!=null)

s2+=s1+" ";//把文件中的每行数据全部放进一个字符串s2

s2+=str+" ";

//再把s2于形参str相连放进s2

BufferedReader in2 =

//把字符

new BufferedReader(

//串s2也

new StringReader(s2));

//就是原

PrintWriter out =

//文件+

new PrintWriter(

//形参str(新输入的一行数据)

new BufferedWriter(

//重新写进data.txt

new FileWriter(file)));

//覆盖原来的数据

while ((s3=in2.readLine())!= null)

{

out.println(s3);

}

out.close();

//System.out.println("write data true.");

}catch (IOException e){}

}else{

System.err.println("File "data" Missing!");

}

}

public void clearData()//清除data.txt的所有数据的方法

throws IOException

{

File file = new File("c:data.txt");

if(file.exists())//如果文件在

{

try{

PrintWriter out =

new PrintWriter(

new BufferedWriter(

new FileWriter(file)));

out.print("");//在文件data.txt里写进一个空字符,所以清除了原来的内容

out.close(); //关闭文件

System.out.println("clear data true!");

}catch(IOException e){}

}else{

System.err.println("File "data" Missing!");

}

}

public void deleteData(long deleteNumber)//删除某条号码数据

throws IOException,FileNotFoundException

{

isDelete = true;

try{

DataMap mp = new DataMap();//生成一个自己编写的容器

long j=0;

String s1="",s2="",s3="";

BufferedReader in =

new BufferedReader(

new FileReader("c:data.txt"));

while ((s1=in.readLine())!=null)

{

j=numberTokenizer(s1);

mp.put(j,s1);

}

try{

if(mp.containsKey( String.valueOf(deleteNumber).toString()))

{

mp.remove(deleteNumber);

}else

throw new NumberNotFoundException();

Collection c = mp.values();

Iterator iter = c.iterator();

while(iter.hasNext())

{

s1 = (String)iter.next();

s3 +=s1+" ";

}

BufferedReader in2 =

new BufferedReader(

new StringReader(s3));

PrintWriter out =

new PrintWriter(

new BufferedWriter(

new FileWriter("c:data.txt")));

//System.out.println("delete No"+deleteNumber);

while( (s1 = in2.readLine())!=null)

{

out.println(s1);

} out.close(); }catch (NumberNotFoundException e) {

isDelete = false;

System.out.println(deleteNumber+" no found :(");

}

}catch(IOException e){}

}

public long numberTokenizer(String s)

throws IOException

{

StringTokenizer st =

new StringTokenizer(s," ");

return Integer.valueOf((st.nextToken())).longValue();

}

public void findData(long find)//查找数据

throws IOException,NumberNotFoundException

{

isFind = true;

String s = "",findString =""; long i; DataMap dm = new DataMap(); BufferedReader in =

new BufferedReader(

new FileReader("c:data.txt"));

while ((s=in.readLine())!=null)

{

i=numberTokenizer(s);

dm.put(i,s);

}

//in.close();

try{

if(dm.containsKey( String.valueOf(find).toString()))

{

findString = dm.get(find);

System.out.println("学号"+find+"学生的资料是:");

System.out.println(findString);

}else

throw new NumberNotFoundException();

}catch (NumberNotFoundException e){

System.out.println(find+" no found :(");

isFind = false;

}

}

public static void print()//读取文本文件把数据打印到终端的方法

throws IOException

{

try{

BufferedReader in =

new BufferedReader(

new FileReader("c:data.txt"));

String read = "";

while ((read = in.readLine())!=null)

System.out.println(read);

}catch(IOException e){}

}

public static void timeOut(double sec)//停顿短暂时间的一个方法完全可以不要这个功能

{

double seconds = sec;

long t = System.currentTimeMillis()+(int)(seconds*1000);

while ((System.currentTimeMillis())

;

}

public void numSort()//按学号排序

throws IOException

{

long i = 0;

String s = "";

try{

DataArrayList dal = new DataArrayList();

BufferedReader in =

new BufferedReader(

new FileReader("c:data.txt"));

while ((s=in.readLine())!=null)

{

i=numberTokenizer(s);

dal.add(i);

}

Collections.sort(dal);

DataMap dm = new DataMap();

BufferedReader in2 =

new BufferedReader(

new FileReader("c:data.txt"));

while ((s=in2.readLine())!=null)

{

i=numberTokenizer(s);

dm.put(i,s);

}

PrintWriter out =

new PrintWriter (

new BufferedWriter(

new FileWriter("c:data.txt")));

Iterator it = dal.iterator();

long temp = 0;

String tempStr = "";

while (it.hasNext())

{

temp = Integer.valueOf((String)it.next()).longValue();

tempStr = dm.get(temp);

out.println(tempStr);

}

out.close();

}catch(IOException e){}

}

public void rewrite()

throws IOException,NumberNotFoundException

{

try{

System.out.print("请输入你要修改的学生号码:");

BufferedReader in =

new BufferedReader (

new InputStreamReader(System.in));

String inputLine = in.readLine();

long num = Integer.valueOf(inputLine).longValue();

findData(num);

if(isFind)

{ deleteData(num); System.out.print("请重新输入该号码:"); String str = inputData();

addData(str);

System.out.println("rewrite true!");

}

}catch(IOException e){}

catch(NumberNotFoundException e){}

}

public int count()

throws IOException

{

DataArrayList dal = new DataArrayList();

try{

String s = "";

long i =0;

BufferedReader in =

new BufferedReader(

new FileReader("c:data.txt"));

while ((s=in.readLine())!=null)

{

i=numberTokenizer(s);

dal.add(i);

}

}catch(IOException e){}

return dal.size();

} } /* *

* @author RangWei * TODO 这是个写的一个容器,继承公共类HashMap * 大概的功能就相当一个数组

*

*/ class DataMap extends HashMap//一个存储数据的Map

{

public void put(long i,String str)//把学号和数据放进这个Map

{

//以后一个学号(key)对应的是一个人的数据(value)

put(String.valueOf(i).toString(),str);

}

public void remove(long i)//接收学号,然后删除学号(key)和它对应的数据(value)

{

remove(String.valueOf(i).toString().toString());

}

public String get(long i)//接收一个学号,然后返回这个key对应的value

{

String s = String.valueOf(i).toString();

if (!containsKey(s))

{

System.err.println("Not found Key: "+s);

}

return (String)get(s);

} } /*

*

* @author RangWei * * TODO 这个类继承ArrayList * 用来按数字排序,在用号码排序时要用到它

*

*/ class DataArrayList extends ArrayList {

public void add(long num)

{

String numToString = String.valueOf(num).toString();

add(numToString);

} } /* *

* @author RangWei * * TODO 增加的一个Exception,主要是在文件里没有要找

* 的号码就抛出

*

*/ class NumberNotFoundException extends Exception {

public NumberNotFoundException()

{} }

第三篇:8通讯录管理系统C#编程_课程设计_图文.

福建工程学院

课程名称:C#.NET程序设计 设计题目:通讯录管理系统 学生班级: 学生姓名: 指导教师: 完成日期:

一、设计目的 (1

二、需求分析 (2 2.1设计题目 (2 2.2设计构思 (2 2.3运行界面需求 (3 2.4开发及运行环境 (3 2.5程序文件清单 (3 2.5.1数据库模块 (3

三、模块分析及设计 (4 3.1系统功能结构图 (4 3.2系统数据流程图 (4

四、数据库设计 (5

4.1数据库需求分析 (5 4.2E-R图 (6 4.3数据表设计 (6 4.3.1登录用户信息表(Users (6 4.3.2通讯录信息表(Contact (7

五、制作过程及要点 (7 5.1IsExist类 (7 5.2用户登录与注册模块详细设计 (8 5.3系统主界面设计 (14 5.4通讯录“显示全部”模块 (15 5.5通讯录“添加”模块 (17 5.6通讯录“查找”模块 (18 5.7通讯录“修改”模块 (20 5.8通讯录“删除”模块 (22

六、设计总结 (24

七、主要参考书及手册 (25

一、设计目的

日益繁多的人际交往使得我们很难搞清楚与每个人之间的联系方式,特别是对于做经常出差的人来说更是难,所以通讯录能够便捷的给我们带来所需要的相关信

息。而随着计算机的普及,人们的生活摆脱了传统式的记事本、电话簿,越来越多的靠计算机来帮助人们记住这些事情,极其简便。这就需要有一个使用的通讯录管理系统,用户可以方便的通过自己电脑的通讯录管理系统,来随时查阅自己所需要的信息,而不必再大费周折去翻开那繁琐的记事本。

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

二、需求分析 2.1设计题目 通讯录管理系统 2.2设计构思

通讯录管理系统功能需求分析: 通讯录管理系统主要功能分为五个模块:用户登录与注册、用户查询、添加记录、修改记录、删除记录。

用户登录与注册:实现不同用户的注册跟登录通讯录

显示全部:实现用户对所有存在于数据库中的数据的显示,方便用户了解数据存储的情况。

查找记录:实现用户在本软件数据库中查找自己需要的数据功能。 添加记录:实现用户添加一条完整的记录,包括姓名、生日、电话、邮箱、地址。

修改记录:用户对数据库中已存在的记录进行修改,然后保存已经修改过的数据

删除记录:用户对数据库中已经存在的记录进行行删除操作,然后保存修改过的数据

2.3运行界面需求 界面应简洁,使用者易操作 2.4开发及运行环境

本系统开发平台及运行环境如下: 系统开发平台:Microsoft Visual Studio2008 系统开发语言:C# 数据库管理软件:SQL Server2005 运行平台:Windows XP(SP2/Windows2000(SP4/Windows Server 2003(SP1 运行环境:Microsoft.NET Framework SDK v3.0 分辨率:最佳效果1024×768像素

说明:SP(Service Pack为Windows操作系统补丁。 2.5程序文件清单 2.5.1数据库模块

数据库名运行平台编程语言简要描述 TongXunLu Sql2005SQL Contact表跟Users表

三、模块分析及设计 3.1系统功能结构图

通讯录管理系统 注册侧 登录 显示全部 添加查找修改删 除 退出系统

3.2系统数据流程图 用户 注册登录 通讯录管理系统 通讯录管理系统主界面 显示全部查 找 记 录 修 改 记

录 删 除 记 录 退 出 系 统

四、数据库设计 4.1数据库需求分析

1针对通讯录管理系统,分别对用户登录、添加通讯录和查找、删除以及修改数据进行详细的调研和分析,总结出如下的需求信息: 1.每条原始记录要有姓名、生日、电话、邮箱、地址信息,其中姓

名不能为空。

2.保证查询到的数据与姓名相一致 3.根据相应姓名删除对应的全部数据

2本数据用于登录用户实体以及通讯录信息实体 4.2E-R 图

用户 用户名密码 信息 操作 N 1 姓名 生日 邮箱 电话 地址

4.3数据表设计

·数据库名称:TongXunLu,共有2个表:

1、用户表(Users

2、通讯录联系表(Contact 4.3.1登录用户信息表(Users

4.3.2通讯录信息表(Contact

五、制作过程及要点 5.1IsExist类

开发项目时,以类的形式来组织、封装一些常用的方法和事件,以便提高代码的重用率,大大方便了代码的管理。本系统中创建了一个公共类:IsExist.cs,主要是用来判断后台数据库里是否存在用户输入

的内容如果存在就返回true,否则返回false。 using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; namespace TongXun { class IsExist { public bool isNameExist(string str { string checkString="select*from Contact where姓名=+str+"; SqlConnection sqlcon=new SqlConnection(; sqlcon.ConnectionString="Initial Catalog=TongXunLu;Data Source=(local;Integrated Security=true"; SqlCommand sqlcmd=new SqlCommand(;

sqlcon.Open(; sqlcmd.CommandText=checkString; sqlcmd.Connection=sqlcon; SqlDataReader dr=sqlcmd.ExecuteReader(; if(dr.HasRows { return true; } else return false; } } } 5.2用户登录与注册模块详细设计 初始登录注册界面 以下为初始界面:

主要代码实现如下: namespace TongXun { public partial class Login:Form { private Input_Check ckInput=new Input_Check(; public Login( { InitializeComponent(; }

private void Form1_Load(object sender,EventArgs e { } private void register_btn_Click(object sender,EventArgs e { Register_Form reg=new Register_Form(; reg.Show(; this.Hide(; } private void login_btn_Click(object sender,EventArgs e { if (!ckInput.UserNameCheck(textBox_name.Text||!ckInput.PassWordCheck(textBox_pwd.Text { MessageBox.Show("您输入的用户名或密码格式错误!请查正后输入。"; return; }

string checkString="select*from Users where UsersName=+textBox_name.Text+and UsersPwd=+textBox_pwd.Text+"; try { SqlConnection sqlcon=new SqlConnection(; sqlcon.ConnectionString="Initial Catalog=TongXunLu;Data Source=(local;Integrated Security=true"; SqlCommand sqlcmd=new SqlCommand(; sqlcon.Open(; sqlcmd.CommandText=checkString; sqlcmd.Connection=sqlcon; SqlDataReader dr=sqlcmd.ExecuteReader(; if(dr.HasRows { Home HomePage=new Home(; HomePage.Show(; this.Hide(; } else

{ MessageBox.Show("用户名或密码错误!"; } } catch(Exception error { MessageBox.Show(error.ToString(; } } //检验输入数据正确性 public class Input_Check { public bool UserNameCheck(string strInput { Regex re=new Regex(@"^[a-zA-Z]w{0,15}$"; if(!re.IsMatch(strInput { return false; }

return true; } public bool PassWordCheck(string strInput { Regex re=new Regex(@"^{0,20}$"; if(!re.IsMatch(strInput { return false; } return true; } } private void textBox_pwd_KeyPress(object sender,KeyPressEventArgs e { if(e.KeyChar==13 { if(!ckInput.UserNameCheck(textBox_name.Text ||!ckInput.PassWordCheck(textBox_pwd.Text {

MessageBox.Show("您输入的用户名或密码格式错误!请查正后输入。"; return; } string checkString="select*from Users where UsersName=+ textBox_name.Text+and UsersPwd=+textBox_pwd.Text+"; try { SqlConnection sqlcon=new SqlConnection(; sqlcon.ConnectionString="Initial Catalog=TongXunLu;Data Source=(local;Integrated Security=true"; SqlCommand sqlcmd=new SqlCommand(; sqlcon.Open(; sqlcmd.CommandText=checkString; sqlcmd.Connection=sqlcon; SqlDataReader dr=sqlcmd.ExecuteReader(; if(dr.HasRows { Home HomePage=new Home(; HomePage.Show(;

this.Hide(; } else { MessageBox.Show("用户名或密码错误!"; } } catch(Exception error { MessageBox.Show(error.ToString(; } } } } } 注册中显示的界面:

主要代码实现如下: namespace TongXun { public partial class Register_Form:Form { public Input_Check ckInput=new Input_Check(; public Register_Form( { InitializeComponent(; } private void button_confirm_Click(object sender,EventArgs e {

if(!ckInput.UserNameCheck(textBox_name.Text { MessageBox.Show("请输入合法用户名!"; textBox_name.Focus(; return; } else if(!ckInput.PassWordCheck(textBox_pwd.Text { MessageBox.Show("请输入符合要求的密码!"; return; } else if(textBox_pwd.Text!=textBox_ensurePwd.Text { MessageBox.Show("两次密码输入不同,请重新输入!"; textBox_ensurePwd.Focus(; textBox_pwd.Focus(; } //若输入无误,则与后台数据库同步 SqlConnection conn=new SqlConnection(;

conn.ConnectionString="initial catalog=TongXunLu;Data Source=(local;integrated security=true;"; conn.Open(; SqlCommand cmd=conn.CreateCommand(; string RegisterString="INSERT INTO Users(UsersName,UsersPwd VALUES(+textBox_name.Text+,+textBox_pwd.Text+"; cmd.CommandText=RegisterString; cmd.ExecuteNonQuery(; MessageBox.Show("注册成功!"; this.Close(; Login log=new Login(; log.Show(; } //检验输入数据正确性 public class Input_Check { public bool UserNameCheck(string strInput { Regex re=new Regex(@"^[a-zA-Z]w{0,15}$";

if(!re.IsMatch(strInput { return false; } return true; } public bool PassWordCheck(string strInput { Regex re=new Regex(@"^{0,20}$"; if(!re.IsMatch(strInput { return false; } return true; } } private void button_cancel_Click(object sender,EventArgs e { Login L=new Login(; L.Show(;

this.Hide(; } } } 5.3系统主界面设计 主界面运行截图如下:

主要代码实现如下: private void button_cancel_Click(object sender,EventArgs e { this.panel_Delete.Show(;

this.panel_WeIcome.Show(; } 5.4通讯录“显示全部”模块

用户进入主界面之后,点击显示全部按钮,则系统将数据库中数存储的所有联系人的记录显示到dataGridView2界面中,按照一定的规格排列。其中各项中的数据则严格按照数据库中的要求排列显示。

显示全部功能截图如下:

主要代码实现如下: private void button_ShowAll_Click(object sender,EventArgs e {

this.panel_ShowAll.Show(; this.panel_add.Hide(; this.panel_Search.Hide(; this.panel_Modify.Hide(; this.panel_Delete.Hide(; this.panel_WeIcome.Hide(; SqlConnection conn=new SqlConnection(; conn.ConnectionString="initial catalog=TongXunLu;Data Source=(local;integrated security=true;"; conn.Open(; //创建SqlDataAdapter对象实例

SqlDataAdapter dataSelect=new SqlDataAdapter("select*from Contact ",conn; //创建DataTable对象实例 DataTable dt=new DataTable(; dataSelect.Fill(dt; //填充控件

dataGridView2.DataSource=dt.DefaultView; this.dataGridView2.RowHeadersVisible=true; conn.Close(;

} 5.5通讯录“添加”模块

用户进入通讯录系统主界面,点击添加,进行通讯录的添加操作,填写相应的内容,系统会自动判定是否符合规定要求,例如姓名、生日、年龄、电话号码、地址不能为空,相应属性的字段长度不能超出范围,邮箱格式要符合要求。可用已定义的Input_Check类中EmailCheck(方法进行检验。相关运行界面如下:

主要代码实现如下: private void button_add_Click(object sender,EventArgs e { if(textBox_Name.Text=="" {

MessageBox.Show("请确认姓名输入是否正确!"; return; } else if(!ckInput.PassWordCheck(textBox_birth.Text { MessageBox.Show("请确认生日日期是否正确!"; return; } else if(!ckInput.PassWordCheck(textBox_phoneNum.Text { MessageBox.Show("请确认电话号码是否正确!"; return; } else if(!ckInput.EmailCheck(textBox_Mail.Text { MessageBox.Show("请确认电子邮箱格式是否正确!"; return; } else if(textBox_Address.Text==""

{ MessageBox.Show("地址不能为空!"; } else { SqlConnection conn=new SqlConnection(; conn.ConnectionString="initial catalog=TongXunLu;Data Source=(local;integrated security=true;"; conn.Open(; SqlCommand cmd=conn.CreateCommand(; string AddString="INSERT INTO Contact(姓名,生日,电话,邮箱,地址

VALUES(+textBox_Name.Text+,+textBox_birth.Text+,+textBox_phoneNum.Text+ ,+textBox_Mail.Text+,+textBox_Address.Text+"; cmd.CommandText=AddString; cmd.ExecuteNonQuery(; MessageBox.Show("添加联系人成功!"; conn.Close(; textBox_Name.Clear(; textBox_birth.Clear(; textBox_phoneNum.Clear(;

textBox_Mail.Clear(; textBox_Address.Clear(; } 5.6通讯录“查找”模块

按姓名查找,若数据库中有要查找的记录则通过dataGridView1显示

出来,若不存在该记录则返回“没有您要查找的内容!”的消息框。相关截图如下:

主要代码实现如下: private void button_Search_Click(object sender,EventArgs e { try

{ if(textBox_SearchName.Text=="" { MessageBox.Show("查找的姓名不能为空!"; } else if(textBox_SearchName.Text!= ""&&ise.isNameExist(textBox_SearchName.Text { string searchString="select*from Contact where姓名=+ textBox_SearchName.Text+"; SqlConnection conn=new SqlConnection(; conn.ConnectionString="initial catalog=TongXunLu;Data Source=(local;integrated security=true;"; conn.Open(; //创建SqlDataAdapter对象实例

SqlDataAdapter dataSelect=new SqlDataAdapter(searchString,conn; //创建DataTable对象实例 DataTable dt=new DataTable(; dataSelect.Fill(dt; //填充控件

dataGridView_Search.DataSource=dt.DefaultView; this.dataGridView_Search.RowHeadersVisible=true; conn.Close(; textBox_SearchName.Clear(; } else { MessageBox.Show("没有您要查找的内容!"; textBox_SearchName.Text=""; textBox_SearchName.Focus(; } } catch(Exception exc { MessageBox.Show(exc.ToString(; } } 5.7通讯录“修改”模块

要修改的记录必需是数据库中已存在的记录。

主要代码实现如下: private void button_Modify_Click(object sender,EventArgs e { if(textBox_ModName.Text=="" { MessageBox.Show("请输入要修改的姓名!"; } else if(textBox_ModName.Text!=""&& ise.isNameExist(textBox_ModName.Text { SqlConnection conn=new SqlConnection(;

conn.ConnectionString="initial catalog=TongXunLu;Data Source=(local;integrated security=true;"; conn.Open(; SqlCommand cmd=conn.CreateCommand(; string ModifyString="UPDATE Contact SET姓名=+ textBox_ModName.Text+,"+"生日=+textBox_ModBirthDay.Text+,"+"电话=+ textBox_ModPhone.Text+,"+"邮箱=+textBox_ModMail.Text+,"+"地址=+ textBox_ModAddress.Text+where姓名=+textBox_ModName.Text+"; cmd.CommandText=ModifyString; cmd.ExecuteNonQuery(; MessageBox.Show("修改成功!"; textBox_ModName.Clear(; textBox_ModBirthDay.Clear(; textBox_ModPhone.Clear(; textBox_ModMail.Clear(; textBox_ModAddress.Clear(; } else { MessageBox.Show("您要修改的记录不存在!";

textBox_ModName.Clear(; textBox_ModBirthDay.Clear(; textBox_ModPhone.Clear(; textBox_ModMail.Clear(; textBox_ModAddress.Clear(; } } 5.8通讯录“删除”模块

在TextBox中输入要删除的记录的姓名,确认删除后连接数据库进行删除记录。若该记录不存在则返回提示信息,若操作成功,则返回“删除成功”的信息框提示。“返回首页”按钮则实现返回到登录时的界面。

主要代码实现如下: private void button_delete_Click(object sender,EventArgs e { if(textBox_deleName.Text=="" { MessageBox.Show("请输入要删除的姓名!"; } else if(textBox_deleName.Text!=""&& ise.isNameExist(textBox_deleName.Text { SqlConnection conn=new SqlConnection(;

conn.ConnectionString="initial catalog=TongXunLu;Data Source=(local;integrated security=true;"; conn.Open(; SqlCommand cmd=conn.CreateCommand(; string ModifyString="DELETE FROM Contact WHERE姓名=+ textBox_deleName.Text+"; cmd.CommandText=ModifyString; cmd.ExecuteNonQuery(; MessageBox.Show("删除成功!"; textBox_deleName.Text=""; } else {MessageBox.Show("您输入的姓名不存在!"; textBox_deleName.Text = ""; } }

六、设计总结 这次的课程设计是对我们这学期 c#学习的一次大检验。自己动 手,自己发现和解决问题。发现了自己的许多不足。平时没有掌握好 的知识在这次课程设计中彻底暴露出来,经过不断思考,不断查阅资 料和上机运行, 解决其中大部分问题, 当然还存在一些问题没有解决。 我相信在以后的学习能够解决好它们。 当然从这次课程设计使我们学 到了以前没有学过的很多知识, 在具体的程序实践中主要是对数据库 连接和一些控件的应用有了更深的认识。使我们对 VS 程序设计有了 更深层次的认识和理解, 懂得了 VS 窗体应用程序基本设计流程和 SQL Server 2000 数据库设计。 这次我们是小组作业, 为了使各自做的界面能够更

好的结合到一 起,我们这次设计的数据库比较简单。我们分工合作最后共同努力把 程序的基本功能基本上都实现了。我们通过对课本的研究,通过几天 的努力终于将已经完成了的程序在界面是进行了美化, 可以使用户在 使用的时候能够赏心悦目。 最后,在此由衷的向我的指导老师们表示衷心的感谢,是他们的 悉心指导和严格要求,才使我的课程设计有了较为完善的一面,才有

- 25 - 了我能力的提高,得到了充分的锻炼。

七、主要参考书及手册 [1] 李海涛,Visual Studio.NET 2008 开发一册通。化学工业出版社,2010 年 [2] 江维华,江维清 ,C#.NET 程序设计使用教程,人民邮电出版社,2007 年 [3] 明日科技,Visual C#开发技术大全,人民邮电出版社,2007 年 [4] (美James Foxall ,Visual C# 2008 入门经典,人民邮电出版社,2009 年

第四篇:通讯录详细设计说明书

通讯录管理系统

详细设计说明书

组员:

1210431107

孟磊(项目组长) 1210431119

张静 1210431039

左依婷 1210431041

王庆喜 1210431075

杨江峰

12级计算机软件一班

目录

1. 引言

1.1编写目的 1.2 背景 1.3 定义

1.4 参考材料

2.程序系统的结构 2.1 运行环境 2.2 系统组织结构

3. 程序主要模块设计说明 3.1 程序描述

3.2 主要功能模块设计 3.3 性能 3.4 输入输出 3.5 算法 3.6 流程逻辑 3.7 接口 3.8 存储分配 3.9 注释设计 3.10 测试设计 3.11 限制条件

3.12 尚未解决的问题

1引言

1.1编写目的

本文档将对通讯录系统软件开发的详细设计进行描述,本文档的读者是项目策划、设计和评审人员。

1.2背景

本项目作为《软件文档写作》课程的训练项目提出,将学生分成若干项目开发小组进行管理。希望学生通过通讯录系统软件设计开发,了解软件文档的相关标准和编写原则,训练并掌握软件各类文档写作的技巧,同时提高学生使用Java开发应用程序的能力。

本项目的名称:通讯录管理系统 本项目的提出者:指导老师 本项目的开发者:本小组 项目需求方:日常管理 用户:管理员

1.3定义

通讯录管理系统名称

1.4参考资料

《开发要求说明》. 《软件需求说明书》。 《概要设计说明书》。

2程序系统的结构

2.1运行环境

(1) 设备

硬件最低要求:CPU PⅢ 以上PC服务器,内存32MB以上,硬盘15MB以上。

(2) 支持软件

操作系统:Windows 98,Windows NT、Windows 2000、Windows XP,Windows Server 2003等能

3程序主要模块设计说明

3.1 程序描述

给出对该程序的简要描述,主要说明安排设计本程序的目的意义,并且,还要说明本程序的特点(如 是常驻内存还是非常驻?是否子程序?是可重人的还是不可重人的?有无覆盖要求?是顺序处理还是并发处理等)。

3.2 主要功能模块设计

(1) 打开通讯录系统显示欢迎界面: 具体实现函数

(2) 菜单处理函数管理程序的用户界面操作,用户通过提示选择想要进行的操作:具体实现函数

(3) 本模块主要完成对已有输入的通讯信息进行显示浏览,浏览同时可以进行修改、删除等操作。

(4) 在通讯录查询模块中,用户可以通过查询尽快找到希望查找的联系人,查询支持模糊查询,可以匹配多个字段;给出查询记录的信息;如果查询的信息不存在,输出提示信息。

(5) 根据系统的输入要求添加各项信息,每次可以添加一个或多个新的记录,新增的记录可以不存入原文件中,也可以指定文件追加内容;能给出新添加记录的信息;添加后提示添加是否成功。

(6) 根据特定信息选择所要删除的对象

(7)修改记录:具体实现函数

保存记录:具体函数实现

读取记录:具体实现函数

清空当前记录:具体实现函数

3.3 性能

满足个人使用的需求(记录量控制在1000项内)。对前面提到的运行环境要求不应存困难。本软件采用可视化界面,用户通过单击界面上的相关按钮就可以完成各项操作。一般操作的响应时间应在1~2秒内,对软磁盘和打印机的操作也应在可接受的时间内完成。查询时应保证查全率,所有相应域包含查询关键字的记录都应能查到。因为通常的ISCDS规模在几十到几百项记录,以查全率为标准所带来的对查准率的影响并不大。

3.4 输人输出项

数据名称:联系人姓名、联系人邮箱、联系人电话

数据类型:char,

数据格式:例Lily,Note@gm.com,123321;

3.5 算法

本程序没有采取特殊的算法

3.6 流程逻辑

用户(1)浏览功能(2)查询信息用户登录是否是管理员Y进入管理员管理N权限级别根据级别不同提供给不同的服务 该流程图表示通讯录系统的逻辑流程,用户可以直接浏览和查询通讯录简单信息,也可以先登录,如果是管理员则具有管理权限,可进入管理员的管理页面;如果不是管理员,则判断用户权限级别,根据用户的权限级别提供不同的服务。

3.7 接口

部分用户接口视图

3.8 存储分配

无特殊要求

3.9 注释设计

①加在程序单元首部,说明本程序的作用。 ②对程序中的变量代表的意思、范围进行注释。 ③对程序中的函数或过程所起的作用进行注释。 具体注释见类图部分。

3.10 测试计划

(1) 界面测试

主要包括以下几个方面内容:

a. 页面在窗口中的现实是否正确,美观(在调整浏览器窗口大小时,屏幕刷新是否正确,表样式大小,格式,是否对提交数据进行验证(如果在页面部分进行验证的话)等,连接的形式,位置是否易于理解等。

b. 站定地图和导航条位置是否合理,是否可以导航,是否覅和用户要求。

c. 页面元素基本功能是否实现,容错性是否存在,页面元素外形,是否现实正确。

测试技术:结合兼容性测试对不同分辨率下页面现实效果,如果有影响则提出解决方案,可以结合数据定义文档查看表单项的内容,长度等信息。 界面测试要素:符合标准和规范,灵活性,正确性,直观性,舒适性,实用性,一致性。

(2)功能测试

测试分为白盒测试和黑盒测试。

白盒测试是指跟踪代码以人工检查追踪的方式查找BUG。

黑盒测试是指使用者对代码不可见,直接使用系统,把出现的异常记录下来,整理成测试报告,主要是覆盖全部的功能,可以结合兼容,性能测试等方面进行,考虑正确性,可用性,边界条件,性能,压力测试。多用户情况考虑压力测试工具,建议压力和性能结合起来进行,可以查看CPU使用率,内存占用情况,还可以模拟大量数据输入,对硬盘的影响等信息。其中压力测试包括错误恢复错误处理,页面数据验证,包括突然间断电,输入脏数据等。兼容性,不同浏览器,不同应用程序版本在实现功能时的表现,不同的上网方式。

本系统在最后阶段经过了测试,主要是黑盒测试,由于系统模块并不十分复杂,在继承测试的过程中出现的问题并不多, 相对而言比较顺利。

3.11 限制条件

说明本程序运行中所受到的限制条件。

3.12 尚未解决的问题

人机界面设计,系统安全性验证用户界面设计,登录窗口是用户进入系统的第一个界面,也是进入系统的首道“关卡”。因此,简洁、友好、清晰醒目是设计时要考虑的风格。及系统主模块与数据库的很好连接,是尚未解决的问题。

第五篇:书签设计通讯报道

美术学院第八届校园读书节系列活动之

“徜徉书海,签动我心”书签设计大赛活动

为营造出浓厚的校园文化艺术氛围,促进优良学风校风的形成,美术学院秘书处于2014年5月4日晚在美术楼109教室 “徜徉书海,签动我心”书签设计大赛。

经过前期的班级宣传工作,美术学院学生带好作品在5月4日晚自习期间来到109教室上交。收齐作品后秘书处部长刘荣安排各成员投票选出优秀的书签设计作品。统计获奖人员名单后由副部对此次竞赛活动作出总结并拍摄照片。

1995年正式确定每年4月23日为“世界图书与版权日”,设立目的是推动更多的人阅读和写作。读书节已成为我校文化建设的一个重要部分。

通过本次书签设计大赛活动,秘书处纪念了读书节这一个特殊的节日,表现出同学们对于读书的重视,美观实用的书签方便的同学们的阅读,增加阅读兴趣。活动增强了读者的阅读意识,促进了美院学生阅读习惯的养成,丰富了广大学生的校园文化生活。

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

上一篇:暑假三下乡调研心得下一篇:暑假学生安全承诺书