通讯录程序设计报告
C语言程序设计报告 通讯录
C语言程序设计课程设计报告设计题目:通讯录学号2010211766班级通信与信息类0101012班姓名万同堂2011年12月03日录入联系人信息(包括姓名、电话号码、地址等信息);通讯录管理系统要求实现以下功能:1、输入每一位联系人记录,将其信息存入文件中。
2、查询所有联系人的信息,并按可选的自定义规则进行排序;3、记录修改,将修改的记录信息保存于文件中。
1、设一个通信录由以下几项数据信息构成:数据项类型姓名字符串地址字符串邮政编码字符串电话号码字符串试为通信录数据定义类型和定义通信录变量,实现功能:存取、显示、删除记录、查询记录等功能。
2、要求:界面友好,易于操作系统功能模块图:添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱等后,会提示是否继续添加。
显示:可以以表格形式输出所有通讯录里的记录删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容查询:可以选择用姓名、电话、地址三种方式查询修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改保存:,输入文件名(带后缀名)后,即可将通讯录信息保存到文件(1).通讯录:主要代码struct user{char name[20];//用户名char adr[20];//地址char numb[20];//手机号char code[20];//邮政编码};typedef struct user user;int main(){int key,m ;int n = 0;user u[N];char num[20];// double insert;printf("\n\n\n"); /*欢迎界面*/printf("\t\t\t\t欢迎光临 \n");printf("\t\t\t 我的个人通讯管理系统\n");printf("\t\t\t 完成日期:2011年12月4日\n\n");using namespace std;time_t t = time(0);printf("\t\t\t您正进入添加界面...\r");Sleep(1000);printf(" \r");char tmp[64];int i=1;while(i<2){i++;strftime( tmp, sizeof(tmp), "\t %Y/%m/%d %X %A 本年第%j 天 %z",localtime(&t) );printf("%s",tmp); /*输出系统时间*/ }printf("\n\n\n\t\t\t\t正在进入...\n\n\n");Sleep(800);printf("\t 本产品已经通过金山、卡巴、江民、360等多款杀毒软件检测,\n");Sleep(800);printf("\t 安全无毒,绿色无插件,请大家放心使用。
简易通讯录系统 C语言程序设计报告
程序设计报告( 2012 / 2013 学年第 2 学期)题目:简易通讯录管理系统专业应用物理学生姓名于浩班级学号 B12080507指导教师骆健指导单位计算机学院计算机科学与技术系日期 2013.3.27简易通讯录管理系统程序设计报告一、课题内容和要求本课题设计是对基础课《面向对象程序设计》课程知识的进一步巩固并加强解决实际问题的能力。
目的是通过实习,一方面使学生加深对课内所学的有关面向对象概念的理解;另一方面,在具体的程序设计中掌握基于C语言的程序设计方法。
通过进行计算机实践,更加系统地理解和掌握C语言的基本概念、语言特点和编程技巧。
利用系统提供的标准函数和自定义函数进行程序设计,培养利用C语言设计综合程序的能力。
通过该课程设计使学生掌握一种程序设计开发环境,提高同学们自己学习、查阅资料、独立分析问题和解决问题的能力。
二、需求分析设计通讯录系统,其信息中包括姓名、电话、地址等数据项。
所设计的系统要有简单的DOS界面,方便用户进行操作,显示以下功能:(1)建立通讯录。
(2)插入、删除、修改通讯录记录(3)查询通讯录记录,要求可按姓名和电话号码查询(4)可按姓名或电话号码对通讯录进行排序(5)信息记录要存放在文件中,因而要实现文件的输入/输出功能三、概要设计系统功能模块图:建立:可以一次性输入多个人的相应信息显示:可以输出通讯录里所有的记录查询:可以选择用姓名、电话两种方式查询信息修改:输入欲修改的那个人的名字后,再依次输入姓名、电话号码、地址即可完成修改添加:可以添加通讯录记录,依次输入姓名、电话号码、地址即可完成删除:输入欲删除的那个人的名字后,会自动删除其相应的记录内容排序:可以按姓名或电话号码对通讯录进行排序保存:将通讯录信息保存到文件四、源程序代码#define N 100#define SIZE 30#include <stdio.h>#include <string.h> //字符函数和字符串函数#include <conio.h> //字符模式函数#include <process.h>struct student{char name[SIZE];char tel[SIZE];char adress[SIZE];}; //函数声明void myprint(); // 显示菜单int mycreat(struct student*p,int n); // 输入通讯录void mydisplay(struct student*p,int n); // 显示通讯录void mysearch(struct student*p,int n); // 查找void mymodify(struct student*p,int n); // 修改通讯录int myadd(struct student*p,int n); // 增加通讯录int mydelete(struct student*p,int n); // 删除void mysort(struct student*p,int n); // 排序void sch_tel(struct student*p,int n); // 按电话号码查找void sch_name(struct student*p,int n); // 按姓名查找int loadinfo(struct student*p,int n); // 载入通讯录信息int saveinfo(struct student*p,int n); // 保存通讯录信息void main(){ // 文件定义char yes_no ;int choose; //定义choose为整形struct student record[N]; // 存放通讯录信息,共100 条int total=0,flag ; // 通讯录总数total=loadinfo(record,N); // 从文件读取记录信息,不超过100 条do{myprint(); // 显示菜单printf(" 请选择:");scanf("%d",&choose); //输入数据switch(choose){case 1 :total=mycreat(record,total);break ;case 2 :mydisplay(record,total);break ;case 3 :mysearch(record,total);break ;case 4 :mymodify(record,total);break ;case 5 :total=myadd(record,total);break ;case 6 :total=mydelete(record,total);break ;case 7 :mysort(record,total);break ;case 8 :flag=saveinfo(record,total);if(flag==1)printf("\n 保存失败!\n");elseprintf("\n 保存成功!\n");break ;case 0 :exit(0);break ;default :printf("\n %c 为非法选项!\n",choose); }if(choose==0)break ;printf("\n 要继续选择吗(Y/N)?");do{yes_no=getchar();}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');}while(yes_no!='N'&&yes_no!='n');}void myprint() // 显示菜单信息{printf(" \n");printf(" 请输入选项编号(0--7) \n");printf(" 1---建立通讯录\n");printf(" 2---显示通讯录\n");printf(" 3---查询通讯录\n");printf(" 4---修改通讯录\n");printf(" 5---添加通讯录\n");printf(" 6---删除通讯录\n");printf(" 7---排序通讯录\n");printf(" 8---保存通讯录\n");printf(" 0---退出\n");printf(" \n"); }int mycreat(struct student*p,int n) // 批量输入学生信息{int i=0 ;int m ;printf("添加前的记录,共有<%d>个:\n",n);printf("\n 记录号姓名电话号码地址\n");i=0 ;while((i<n)&&(strcmp(p->name,"")!=0)){printf("%d: %15s%15s%15s\n",i+1,p->name,p->tel,p->adress);i++;p++;}printf("\n 请输入要输入的学生人数(< %d): ",N-n);scanf("%d",&m);i=0 ;while(i<m){printf("\n");printf("请输入第%d 个记录:\n",i+1);printf("姓名:");do{gets(p->name);}while(strcmp(p->name,"")==0);printf("电话号码:");gets(p->tel);printf("地址:");gets(p->adress);p++;i++;}return m+n ;}void mydisplay(struct student*p,int n) // 显示学生信息{//clrscr();int i=0 ;printf("\n 记录号姓名电话号码地址\n");while(i<n){printf("%d: %15s%15s%15s\n",i+1,p->name,p->tel,p->adress);p++;i++;}}void mymodify(struct student*p,int n) // 修改学生信息{char c;int i ;char nam[10];mydisplay(p,n);printf("\n 请输入要修改记录的姓名:");c=getchar();gets(nam);for(i=0;i<n;i++,p++)if(strcmp(nam,p->name)==0)break ;if(i==n)printf("无此人!\n");else{printf("请输入正确的电话号码:");do{gets(p->tel);}while(strcmp(p->tel,"")==0);printf("请输入正确的姓名:");gets(p->name);printf("请输入正确的地址:");gets(p->adress);}}void mysearch(struct student*p,int n) // 查找指定学生{char c ;mydisplay(p,n);printf("\n 按电话号码查询(h),还是按姓名查询(m)?");c=getchar();c=getchar();if(c=='h'||c=='H')sch_tel(p,n);else if(c=='m'||c=='M')sch_name(p,n);elseprintf("\n 非法字符!\n");}void sch_tel(struct student*p,int n) // 按电话号码查询{char c ;int i,flag=0 ;char tel[10];printf("\n 请输入要查询记录的电话号码:");c=getchar();gets(tel);for(i=0;i<n;i++)if(strcmp(tel,p[i].tel)==0){printf("\n 姓名电话号码地址\n");printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);flag=1 ;}if(flag==0)printf("无此人!\n");}void sch_name(struct student*p,int n) // 按姓名查询{char c ;int i,flag=0 ;char nam[10];printf("\n 请输入要查询记录的姓名:");c=getchar();gets(nam);for(i=0;i<n;i++)if(strcmp(nam,p[i].name)==0){printf("\n 姓名电话号码地址\n");printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);flag=1 ;}if(flag==0)printf("无此人!\n");}int myadd(struct student*p,int n) //增加学生信息{int i=0 ;char c ;struct student t,*q ;printf("添加前的记录:\n");printf("\n 姓名电话号码地址\n");i=0 ;q=p ; // 显示原有记录信息while(i<n){printf("%15s%15s%15s\n",q->name,q->tel,q->adress);i++;q++;}do{printf("请输入新记录的姓名:\n");do{gets();}while(strcmp(,"")==0); // 姓名不能为空printf("请输入新记录的电话号码:");gets(t.tel);printf("请输入新记录的地址:");gets(t.adress);{*(p+i)=t ;printf("添加后的记录:\n");printf("\n 姓名电话号码地址\n");for(i=0;i<n+1;i++)printf("%15s%15s%15s\n",(p+i)->name,(p+i)->tel,(p+i)->adress);break ;}}while(c=='y'||c=='Y');return n+1 ;}int mydelete(struct student*p,int n) // 删除学生信息{int i,x ;char c,tel[10],nam[10];printf("删除前的记录:\n");printf(" \n 姓名电话号码地址\n");for(i=0;i<n;i++)printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);printf("按电话号码删除(h),还是按姓名删除(m)?");c=getchar();c=getchar();if(c=='h'||c=='H'){printf("\n 请输入要删除记录的电话号码:");c=getchar();gets(tel);for(x=0;x<n;x++)if(strcmp(tel,p[x].tel)==0)break; //说明提前结束循环,找到人if(x<n){for(i=x;i<n-1;i++){p[i]=p[i+ 1];}printf("删除后的记录:\n");printf(" 姓名电话号码地址\n");for(i=0;i<n-1;i++)printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);}elseprintf("无此人\n");}elseif(c=='m'||c=='M'){printf("\n 请输入要删除记录的姓名:");c=getchar();gets(nam);for(x=0;x<n;x++)if(strcmp(nam,p[x].name)==0)break ;if(x<n){for(i=x;i<N-1;i++){p[i]=p[i+1];}printf("删除后的记录:\n");printf(" 姓名电话号码地址\n");for(i=0;i<n-1;i++)printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);}elseprintf("无此人\n");}elseprintf("\n 非法字符\n");return n-1 ;}void mysort(struct student*p,int n) // 排序函数{char c;int j,i,k ;char c1;struct student temp ;printf("\n 排序前的记录:\n");printf("\n 姓名电话号码地址\n");for(i=0;i<n;i++)printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);printf("\n 按电话号码排序(h),还是按姓名排序(m)?");c=getchar();c1=getchar();if(c1=='h'||c1=='H') //按号码排序{for(i=0;i<n-1;i++){k=i ;for(j=i+1;j<n;j++)if(strcmp(p[k].tel,p[j].tel)>0)k=j;if(k!=i){temp=p[k];p[k]=p[i];p[i]=temp;}}printf("\n 排序后的记录:\n");printf("\n 姓名电话号码地址\n");for(i=0;i<n;i++)printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);}else if(c1=='m'||c1=='M') // 按姓名排序{for(i=0;i<n-1;i++){k=i ;for(j=i+1;j<n;j++)if(strcmp(p[k].name,p[j].name)>0)k=j ;if(k!=i){temp=p[k];p[k]=p[i];p[i]=temp;}}printf("排序后的记录:\n");printf("\n 姓名电话号码地址\n");for(i=0;i<n;i++)printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);}}int loadinfo(struct student*p,int n) // 载入通讯录信息{FILE*fp ;int i,all=0 ;char filename[30]="txl.txt" ;fp=fopen(filename,"rb");if(fp==NULL){printf("\n***不能打开文件%s,或%s 文件不存在!***",filename,filename);return 0 ;}fscanf(fp,"%d\n",&all);if(all>N) // 读取记录总数{printf("文件记录数太多,不能读取");return 0;}for(i=0;i<all;i++) // 读取记录信息{fscanf(fp,"%s %s %s\n",p[i].name,p[i].tel,p[i].adress);}fclose(fp); // 关闭文件return all ;}int saveinfo(struct student*p,int n) //保存{FILE*fp ;int i,all=0 ;char filename[30]="txl.txt" ; //文件可以用记事本打开fp=fopen(filename,"w");if(fp==NULL){printf("\n***不能建立或打开文件%s!***",filename);return 0 ;}fprintf(fp,"%d\n",n);for(i=0;i<n;i++)fprintf(fp,"%s %s %s\n",p[i].name,p[i].tel,p[i].adress);fclose(fp);return 0;}五、测试数据及其结果分析测试数据时,刚开始都比较顺利,如图:开始不久就出现问题,我发现当号码位数不一致时,排序就乱了,如下图:后来我与同学讨论调试后,发现原因是排序函数是按号码从左到右的顺序依次比较各个数字进行排序。
通讯录管理系统c语言课程设计报告(一)
通讯录管理系统c语言课程设计报告(一)通讯录管理系统C语言课程设计报告1. 简介通讯录管理系统是一款基于C语言开发的软件,旨在帮助用户方便地存储、查找、编辑和删除联系人信息。
本报告将对该系统的功能和设计进行详细介绍。
2. 系统功能通讯录管理系统具备以下主要功能:•添加联系人:用户可以输入联系人的姓名、电话号码、电子邮件等信息,并将其添加到通讯录中。
•查找联系人:用户可以根据姓名或电话号码等方式,快速查找通讯录中的联系人信息。
•编辑联系人:用户可以修改通讯录中已有联系人的信息,如电话号码、电子邮件等。
•删除联系人:用户可以从通讯录中删除特定联系人。
•显示通讯录:用户可以查看通讯录中的所有联系人信息。
•退出系统:用户可以选择退出通讯录管理系统。
3. 系统设计数据结构通讯录管理系统主要使用以下数据结构存储联系人信息:•结构体:定义了一个联系人的数据结构,包括姓名、电话号码、电子邮件等字段。
•数组:用于存储多个联系人信息,构成通讯录。
数组的每个元素对应一个联系人的结构体。
主要函数添加联系人函数void addContact(struct Contact contacts[], int *num Contacts)•功能:向通讯录中添加一个联系人。
•输入参数:通讯录数组contacts、通讯录中联系人数量numContacts的指针。
•输出:无。
查找联系人函数void searchContact(struct Contact contacts[], int n umContacts)•功能:根据用户提供的关键词在通讯录中查找联系人。
•输入参数:通讯录数组contacts、通讯录中联系人数量numContacts。
•输出:无。
编辑联系人函数void editContact(struct Contact contacts[], int num Contacts)•功能:根据用户选择的联系人在通讯录中编辑联系人信息。
C语言课程设计通讯录实验报告
C语言课程设计通讯录实验报告实验目的:本实验旨在通过设计一个通讯录程序,加深理解和掌握结构体、函数和文件操作等C语言知识,并培养学生的实践能力和解决问题的能力。
实验要求:设计一个通讯录程序,能够实现添加联系人、删除联系人、查找联系人、修改联系人信息等基本功能,并能够将联系人信息保存到文件中,实现数据的持久化存储。
实验原理:通讯录程序的数据结构可以设计为一个结构体数组,每个元素表示一个联系人,结构体包含姓名、电话号码、地址等信息。
通过使用不同的函数实现不同的功能,如添加联系人函数addContact()、删除联系人函数deleteContact()、查找联系人函数searchContact()等。
实验步骤:1. 定义一个结构体类型,包含姓名、电话号码和地址等信息。
2. 声明并实现各个功能函数,如添加联系人函数addContact()、删除联系人函数deleteContact()、查找联系人函数searchContact()等。
3. 在主函数中使用循环菜单来实现用户的各种操作选择。
4. 将联系人信息保存到文件中,实现数据的持久化存储。
5. 编译并运行程序,验证程序的正确性和功能完整性。
实验结果:通过实验,成功设计并实现了一个通讯录程序,能够实现添加联系人、删除联系人、查找联系人、修改联系人信息等基本功能,并能够将联系人信息保存到文件中,实现数据的持久化存储。
实验总结:本实验通过设计一个通讯录程序,加深了对结构体、函数和文件操作等C语言知识的理解和掌握,同时也培养了解决问题的能力和实践能力。
通过实验,我进一步理解了结构体的定义和使用、函数的声明和调用、文件的打开和关闭等操作。
在实验过程中,我也遇到了一些问题,如如何优化查找联系人的算法、如何处理文件打开失败的情况等,通过思考和调试逐步解决了这些问题。
实验过程中的问题和解决方法不仅加深了对C 语言的理解,也提高了解决问题的能力。
C语言通讯录程序设计
}
break;
}
if(mark>0)
{
printf("\t\t请输入修改联系人信息\n\n");
printf("\t\t请输入联系人姓名:");
scanf("%s",p->name);
printf("\t\t请输入联系人电话:");
scanf("%s",p->phone);
printf("\t\t请输入联系人地址:");
printf("\n*************************************************************************\n\n");
printf ("\t\t输入要修改联系人的姓名:");
gets(name);
if(p!=NULL)
{
for(i=1;i<=len;++i,p=p->pNext)
printf("请按Enter键继续");
printf ("\n*************************************************************************\n");
getchar();
return 0;
}
int len=number(pHead);
《程序设计综合实习[软]》
实 习报告
学 号
姓 名
班 级
指导教师
*******大学
2016年9月
课程设计题目:个人通讯录管理系统
通讯录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语言进行程序设计是时代的要求,也是计算机工作者的一项基本功。
通讯录管理系统课程设计报告
通讯录管理系统课程设计报告一、引言通讯录管理系统是一种用于存储和管理联系人信息的应用程序,它可以帮助用户方便地记录和查找各种联系人信息。
在本课程设计报告中,我们将讨论通讯录管理系统的设计和实现过程,以及系统的功能特点和操作流程。
二、需求分析通讯录管理系统需要具备以下基本功能: 1. 添加联系人信息:用户可以输入姓名、电话号码、电子邮件地址等信息来添加新的联系人。
2. 查找联系人信息:用户可以通过姓名或电话号码等关键词来查找已添加的联系人信息。
3. 修改联系人信息:用户可以对已有联系人信息进行修改和更新。
4. 删除联系人信息:用户可以选择删除不需要的联系人信息。
5. 显示所有联系人信息:系统可以按照一定的格式将所有联系人信息展示给用户。
三、系统设计1. 数据结构为了存储联系人信息,我们可以使用一个包含姓名、电话号码、电子邮件地址等字段的结构体来表示每个联系人。
可以使用链表或数组来组织所有联系人信息。
2. 模块设计通讯录管理系统可以划分为以下几个模块: - 添加联系人模块:实现添加新联系人信息的功能。
- 查找联系人模块:实现根据关键词查找联系人信息的功能。
- 修改联系人模块:实现对已有联系人信息进行修改和更新的功能。
- 删除联系人模块:实现删除不需要的联系人信息的功能。
- 显示联系人模块:实现将所有联系人信息按照一定格式展示给用户的功能。
3. 用户界面设计用户界面应该简洁明了,包括各个功能的按钮或选项,以及输入框和显示信息的区域。
用户应该能够方便地进行各种操作和查看联系人信息。
四、系统实现1. 数据存储可以使用文件来存储联系人信息,也可以使用数据库来进行数据持久化。
2. 界面实现可以使用图形界面或命令行界面来实现用户交互功能,不同的界面设计会影响用户体验。
3. 功能实现根据需求分析中的功能,实现各个模块的功能代码,确保系统可以正确地完成相关操作。
五、功能测试在系统实现完毕后,需要进行功能测试,确保系统的各个功能都能正常运行,并且符合需求。
通讯录管理系统基于C#的程序设计实验报告
《W i n d o w s应用开发》综合实验报告课题名称:通讯录管理系统——系统功能实现模块专业:软件技术班级:103361姓名:杨雪学号:02指导教师:李莹成绩:完成日期:2012 年 5 月16 日目录1系统分析 (3)1.1需求分析 (3)1.2储存过程分析 (3)2系统的实现 (5)2.1登陆界面的实现 (5)2.2主窗体的实现 (6)2.3新增联系人实现 (12)1系统分析1.1需求分析本系统将实现多用户对各自通讯录的管理功能,包括:添加联系人、修改联系人、删除联系人、查找联系人。
为了体现多用户的特性,还必须包含一个用户管理子系统,作用是对用户的信息进行管理。
具体功能模块如图1-1所示图1-1功能模块1.2储存过程分析查找联系人模块使用储存过程来搜索数据,查找联系人的储存过程如下ALTER PROCEDURE [查找联系人](@name varchar(50),@phone varchar(50),@user varchar(50))ASif len(@user)=0 return 1if len(@name)=0 and len(@phone)=0beginselect 姓名,组别,工作单位,联系电话,电子邮箱? from [联系人]returnendif len(@name)<>0 and len(@phone)=0beginset @name='%'+@name+'%'select姓名,组别,工作单位,联系电话,电子邮箱? from [联系人]where 姓名like @namereturnendif len(@name)=0 and len(@phone)<>0beginselect姓名,组别,工作单位,联系电话,电子邮箱? from [联系人] where 联系电话like @phonereturnendif len(@name)=0 and len(@phone)<>0beginselect姓名,组别,工作单位,联系电话,电子邮箱? from [联系人] where 联系电话like @phone and 姓名like @namereturnend2系统的实现2.1登陆界面的实现登录窗体如图2-1图2-1处理流程图如图2-2示2-2录窗体流程图实现代码如下private void btnOK_Click(object sender, EventArgs e){try{if (txtUserName.Text.Trim() == "" || txtPassword.Text.Trim() == ""){MessageBox.Show("用户名不能为空,登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}//验证用户SqlConnection conn = new SqlConnection("server=.;database=通讯录管理系统;uid=sa;pwd=521125;");StringBuilder sql = new StringBuilder();sql.AppendFormat("select count(*) from 用户where 用户名=杨雪and 密码='01'", txtUserName.Text.Trim(), txtPassword.Text.Trim());SqlCommand cmd = new SqlCommand(sql.ToString(), conn);conn.Open();int result = Convert.ToInt32(cmd.ExecuteScalar());conn.Close();if (result == 1){//登陆成功frmMain f = new frmMain();f.tsslUserName.Text = txtUserName.Text.Trim();f.Show();this.Hide();}else{MessageBox.Show("用户名错误!", "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}}catch (Exception ee){MessageBox.Show("发生错误!" + ee.Message, "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}}2.2主窗体的实现主窗体设计如图2-3图2-3主窗体处理流程图如图2-4示2.4窗体流程图实现代码如下public partial class frmMain : Form{private string strConn = "server=.;database=通讯录管理系统;uid=sa;pwd=521125;";public frmMain(){InitializeComponent();}private void treeView1_AfterSelect(object sender, TreeViewEventArgs e){LoadList();}//主窗体加载事件private void frmMain_Load(object sender, EventArgs e){LoadGroup();if (trvGroup.Nodes.Count > 0){trvGroup.SelectedNode = trvGroup.Nodes[0];LoadList();}else{lvContact.Clear();}}/加载分组信息到TreeViewprivate void LoadGroup(){try{trvGroup.Nodes.Clear();SqlConnection conn = new SqlConnection(strConn);SqlCommand cmd = new SqlCommand();cmd.Connection = conn;mandText = "select 组别from 联系人where 用户名='" + tsslUserName.Text + "'";conn.Open();SqlDataReader sdr = cmd.ExecuteReader();while (sdr.Read()){trvGroup.Nodes.Add(sdr[0].ToString());}sdr.Close();conn.Close();}catch{ }}//加载当前分类的联系人信息private void LoadList(){if (trvGroup.Nodes.Count == 0){lvContact.Clear();return;}if (trvGroup.SelectedNode.Index >= 0){string strGroup = trvGroup.SelectedNode.Text;try{lvContact.Clear();lvContact.Columns.Add("姓名", 100);lvContact.Columns.Add("工作单位", 150);lvContact.Columns.Add("联系电话", 100);lvContact.Columns.Add("电子邮箱", 150);SqlConnection conn = new SqlConnection(strConn);SqlCommand cmd = new SqlCommand();cmd.Connection = conn;mandText = "select 编号,姓名,工作单位,联系电话,电子邮箱from 联系人where 组别='" + strGroup + "'and 用户名='" + tsslUserName.Text + "'";conn.Open();SqlDataReader sdr = cmd.ExecuteReader();int count = 0;while (sdr.Read()){ListViewItem lvi = new ListViewItem();lvi.Text = sdr["姓名"].ToString();lvi.SubItems.Add(sdr["工作单位"].ToString());lvi.SubItems.Add(sdr["联系电话"].ToString());lvi.SubItems.Add(sdr["电子邮箱?"].ToString());lvi.Tag = sdr["编号"];lvi.ImageIndex = 0;lvContact.Items.Add(lvi);count++;}tsslCount.Text="共计"+count.ToString()+"个联系人";sdr.Close();conn.Close();}catch{ }}}//详细信息在工具栏上的事件private void详细信息ToolStripMenuItem_Click(object sender, EventArgs e){lvContact.View=View.Details;}//详细信息在菜单栏上的事件private void详细信息ToolStripMenuItem1_Click(object sender, EventArgs e){lvContact.View=View.Details;}//添加方法在主窗体中的实现private void Add(){frmAdd f=new frmAdd();if(f.ShowDialog(this)==DialogResult.OK){LoadGroup();if(trvGroup.Nodes.Count>0){trvGroup.SelectedNode=trvGroup.Nodes[0];LoadList();}else{lvContact.Clear();}}}//编辑方法在主窗体的实现private void Edit(){if(lvContact.SelectedItems.Count==1){string id=lvContact.SelectedItems[0].Text.ToString();frmEdit f=new frmEdit(id);if(f.ShowDialog(this)==DialogResult.OK){LoadGroup();if(trvGroup.Nodes.Count>0){trvGroup.SelectedNode=trvGroup.Nodes[0];LoadList();}else{lvContact.Clear();}}}}//删除方法在住窗体中的实现private void Delete(){if(lvContact.SelectedItems.Count<1){return;}if(MessageBox.Show("是否要删除选中的联系人","删除确认",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes) {string strWhere="";foreach (ListViewItem lvi in lvContact.SelectedItems){strWhere+=lvi.Text.ToString();}try{SqlConnection conn=new SqlConnection(strConn);SqlCommand cmd=new SqlCommand();cmd.Connection=conn;mandText = "delete from 联系人where 姓名='" + strWhere + "'";conn.Open();cmd.ExecuteNonQuery();conn.Close();LoadGroup();if(trvGroup.Nodes.Count>0){trvGroup.SelectedNode=trvGroup.Nodes[0];LoadList();}else{lvContact.Clear();}}catch{ }}}//搜索方法在主窗体中的实现private void Search(){frmSearch f = new frmSearch();if (f.ShowDialog() == DialogResult.OK){LoadGroup();if (trvGroup.Nodes.Count > 0){trvGroup.SelectedNode = trvGroup.Nodes[0];LoadList();}else{lvContact.Clear();}}}}2.3新增联系人实现新增联系人设计如图2-5图2-5新增联系人窗体流程图如图2-6图2-6实现代码如下public partial class frmAdd : Form{private string strconn = "server=.;database=通讯录管理系统;pwd=521125";private string strUserName= "";private int groupCount = 0;private int contentCount = 0;private string txtFilePath = "";public frmAdd(){InitializeComponent();}private void textBox2_TextChanged(object sender, EventArgs e){}private void frmAdd_Load(object sender, EventArgs e){//获取用户名strUserName = ((frmMain)(this.Owner)).tsslUserName.Text;try{SqlConnection conn = new SqlConnection(strconn);SqlCommand cmd = new SqlCommand();cmd.Connection = conn;//获取配置信息mandText = "selete * from 用户名where 用户名='" + strUserName + "'";conn.Open();SqlDataReader sdr = cmd.ExecuteReader();if (sdr.Read()){groupCount = Convert.ToInt32(sdr["组别数量最大值"]);contentCount = Convert.ToInt32(sdr["联系人数量最大值"]);}sdr.Close();//获取联系人数mandText = "select count(*) from联系人where 用户名='" + strUserName + "'";int count = Convert.ToInt32(cmd.ExecuteScalar());if (count >= contentCount){MessageBox.Show("联系人的个数已经达到上限如需继续添加联系人,请联系管理员.", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);btnOK.Enabled = false;}conn.Close();}catch { }pic.Image =通讯录管理系统.Properties.Resources.main1;//加载组别LoadGroup();}protected void LoadGroup(){try{cmbGroup.Items.Clear();SqlConnection conn = new SqlConnection(strconn);SqlCommand cmd = new SqlCommand();cmd.Connection = conn;mandText = "selete disinct 组别from 联系人";conn.Open();SqlDataReader sdr = cmd.ExecuteReader();while (sdr.Read()){cmbGroup.Items.Add(sdr[0].ToString());}sdr.Close();conn.Close();if (groupCount > 0 && cmbGroup.Items.Count == groupCount){cmbGroup.DropDownStyle =ComboBoxStyle.DropDownList;}else{cmbGroup.DropDownStyle = ComboBoxStyle.DropDown;}}catch { }}private void pic_Click(object sender, EventArgs e){if (dlg.ShowDialog() == DialogResult.OK){pic.Image = Image.FromFile(dlg.FileName);txtFilePath = dlg.FileName;}}private void btnOK_Click(object sender, EventArgs e){#region获取信息//用户名strUserName = ((frmMain)(this.Owner)).tsslUserName.Text;//姓名string name;if (txtName.Text == ""){MessageBox.Show("联系人姓名不能为空", "添加失败", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}else{name = txtName.Text;}string group;if (cmbGroup.Text.Trim() == ""){group = "未分组";}else{group = cmbGroup.Text.Trim();}//电话string phone = txtPhone.Text.Trim();//工作单位string company = txtCompany.Text.Trim();//emailstring email = txtEmail.Text.Trim();//照片byte[] b = null;if (txtFilePath != ""){try{FileStream fs = new FileStream(txtFilePath, FileMode.Open, FileAccess.Read);int len = Convert.ToInt32(fs.Length);b = new byte[len];fs.Read(b, 0, len);fs.Close();}catch{b = null;}}#endregion获取信息#region添加数据try{SqlConnection conn = new SqlConnection(strconn);SqlCommand cmd_maxid = new SqlCommand();cmd_maxid.Connection = conn;//获取最大编号cmd_mandText = "selete isnull(max(编号),0)+1 from 联系人";conn.Open();int maxid;try{maxid = Convert.ToInt32(cmd_maxid.ExecuteScalar());}catch{maxid = 1;}//insertSqlCommand cmd_insert = new SqlCommand();cmd_insert.Connection = conn;cmd_mandText = "insert into联系人(编号,用户名,组别,姓名,工作单位,联系电话,电子邮箱,照片)values(@编号,@用户名,@组别,@姓名,@工作单位,@联系电话,@电子邮箱,@照片)";cmd_insert.Parameters.Add("@编号", SqlDbType.Int);cmd_insert.Parameters.Add("@用户名", SqlDbType.VarChar, 50);cmd_insert.Parameters.Add("@组别", SqlDbType.VarChar, 50);cmd_insert.Parameters.Add("@姓名", SqlDbType.VarChar, 50);cmd_insert.Parameters.Add("@工作单位", SqlDbType.VarChar, 500);cmd_insert.Parameters.Add("@联系电话", SqlDbType.VarChar, 200);cmd_insert.Parameters.Add("@电子邮箱", SqlDbType.VarChar, 200);cmd_insert.Parameters.Add("@照片", SqlDbType.Image);cmd_insert.Parameters["@编号"].Value = maxid;cmd_insert.Parameters["@用户名"].Value = strUserName;cmd_insert.Parameters["@组别"].Value = group;cmd_insert.Parameters["@姓名"].Value = name;cmd_insert.Parameters["@工作单位"].Value = company;cmd_insert.Parameters["@联系电话"].Value = phone;cmd_insert.Parameters["@电子邮箱"].Value = email;if (txtFilePath == ""){cmd_insert.Parameters["@照片"].Value = DBNull.Value;}else{cmd_insert.Parameters["@照片"].Value = b;}cmd_insert.ExecuteNonQuery();conn.Close();DialogResult = DialogResult.OK;}catch (Exception ee){MessageBox.Show(ee.Message);return;}#endregion添加数据}private void btnCancel_Click(object sender, EventArgs e){DialogResult = DialogResult.Cancel;}}结论课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,回顾起此次课程设计,至今我们仍感慨颇多,的确,从理论到实践,学到很多很多的东西。
通讯录系统程序设计报告
通讯录系统程序设计报告专业班级:电创新1301班项目名称:通讯录系统程序设计(address book system)小组成员:陈灯念(组长)罗晶晶杨苒晨于桐桐盛超群指导老师:张丽静完成日期:2013年1月2日教师评价:目录一、系统简介1. 目标功能2. 实现功能3. 未实现功能二、成员分工及完成情况三、数据库1. 登录数据库2. 查询数据库3. 老师通讯信息数据库4. 同学信息数据库四、具体模块设计1. 登录部分2. 主界面3. 单击同学按钮4. 单击老师按钮5. 单击按姓名查找按钮6. 单击按学号查找按钮功能五、项目总结一系统简介①目标功能:1.电创新1301班的同学可以用个人姓名作为用户名,个人学号作为密码,进行登录界面的登录。
若姓名与密码匹配,则登录成功。
若输入的姓名不是电创新1301班同学的姓名或用户名与密码不匹配或密码错误,则弹出消息框显示“登录错误,请重试!”2.登录后显示主界面。
(1)双击“同学”按钮,弹出对话框,可依次查看电创新1301班同学通讯信息。
(2)单击“老师”按钮,弹出对话框,可依次查看电创新1301班老师通讯信息。
(3)单击“朋友”按钮,弹出对话框,可依次查看自己的朋友的通讯信息。
(4)单击“家人”按钮,弹出对话框,可依次查看自己的家人通讯信息。
(5)单击“按姓名查询”按钮,弹出一个对话框,键盘输入被查询人(须为电创新1301班同学)的姓名,再单击“咱们来查找吧”按钮,即弹出消息框显示被查询人的通讯信息。
(6)单击“按学号查询”按钮,弹出一个对话框,键盘输入被查询人(须为电创新1301班同学)的学号,再单击“咱们来查找吧”按钮,即弹出消息框显示被查询人的通讯信息。
3. 点击同学,老师,朋友或家人按钮后,弹出对话框,可以单击“添加”按钮或“删除”按钮添加或删除联系人或者单击“修改”按钮修改联系人的信息。
②实现功能:通过本小组成员的通力合作,在看书和上网查询资料后,目前本通讯录实现的功能有:1.电创新1301班的同学可以用个人姓名作为用户名,个人学号作为密码,进行登录界面的登录。
java通讯录课程设计报告
课程设计报告:Java通讯录一、引言本次课程设计是关于Java通讯录的开发,旨在让我们更深入地理解Java编程语言在现实生活中的应用。
通讯录是一种常见的应用程序,它可以帮助我们管理联系人信息,方便我们与朋友和家人保持联系。
二、需求分析本次课程设计的目标是根据用户需求,设计并实现一个功能齐全的Java通讯录应用程序。
具体需求如下:用户可以添加联系人信息,包括姓名、电话号码、电子邮件地址等。
用户可以删除联系人信息。
用户可以编辑联系人信息。
用户可以按姓名、电话号码或电子邮件地址搜索联系人信息。
用户可以查看所有联系人信息。
三、设计数据库设计为了存储联系人信息,我们选择使用Java内置的ArrayList类作为数据库。
ArrayList是一个动态数组,可以根据需要自动增长。
我们将使用ArrayList的add()方法添加联系人信息,使用get()方法获取联系人信息,使用remove()方法删除联系人信息。
界面设计我们使用Java Swing库来创建用户界面。
界面包括以下组件:JLabel:显示提示信息和标题。
JTextField:用于输入和编辑联系人信息。
JButton:用于触发添加、删除、编辑和搜索等操作。
JTable:用于显示所有联系人信息。
JComboBox:用于选择搜索条件。
四、实现添加联系人信息当用户点击“添加”按钮时,程序会创建一个新的联系人对象,并将用户输入的信息设置到该对象中。
然后,程序将该对象添加到ArrayList中。
删除联系人信息当用户选择要删除的联系人并点击“删除”按钮时,程序会从ArrayList中删除该联系人对象。
编辑联系人信息当用户选择要编辑的联系人并点击“编辑”按钮时,程序会将该联系人的信息显示在文本框中,以便用户进行修改。
修改完成后,程序会将修改后的信息保存到ArrayList中。
搜索联系人信息当用户选择搜索条件并输入搜索关键字时,程序会在ArrayList 中查找符合条件的联系人对象,并将其显示在表格中。
C语言程序课程设计报告———通讯录管理系统
海南大学C语言程序课程设计报告学号:***************名:***年级:2012级学院:经济与管理专业:信息管理与信息系统分数:通讯录管理系统一、需求分析设计题目及要求:◆建立通讯录信息,信息包含姓名、籍贯、电话号码、电子邮箱等;◆能够提供添加、删除和修改通讯录信息的功能;◆能够提供安不同方式查询的功能;如按姓名或籍贯、电话等查询;◆将通讯录保存在文件中;◆能够按表格方式输出通讯录信息。
系统功能需求分析:主要包含一下多种功能:1)添加:添加通讯录记录2)显示:显示通讯录记录3)删除:删除通讯录记录4)查询:查询通讯录记录5)修改:修改通讯录记录6)保存:将信息保存到文件二、概要设计系统功能模块图:添加:可以添加通讯录记录,依次输入姓名、电话号码、籍贯、电子邮箱后,会提示是否继续添加。
显示:可以以表格形式输出所有通讯录里的记录删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容查询:可以选择用姓名、、籍贯三种方式查询修改:输入欲修改的那个人的名字后,再依次输入姓名、电话号码、籍贯、电子邮箱即可完成修改保存:输入文件名(带后缀名)后,即可将通讯录信息保存到文件三、程序设计与分析1.1问题提出有个通讯录,要求该系统对通讯录的姓名,籍贯,电话号码,电子邮箱,进行输入,显示,查找,删除,添加,修改,保存等操作的管理。
1.2本系统涉及知识点本系统涉及到所学的知识点有:编译预处理、循环结构、选择结构、顺序结构、数组、函数等。
1.3 功能要求●制作一个通讯录,要求可以记录通讯人的详细联系方式,包括:,籍贯,电话号码,电子邮箱。
●能根据需要随时在通讯录中添加联系人●能根据联系人姓名,籍贯,电话号码中任一信息查找联系人●能根据需要修改某联系人的信息●能删除某联系人的所有详细信息1.4 各模块结构功能及程序说明◆各模块的功能➢Main 模块:根据选单内容实现调用函数➢Delete 模块:删除通讯录中某人信息➢List 模块:显示通讯录中所有人的信息◆程序说明Main 函数void main() /*主函数*/{int n=0;for(;;){switch(menu_select()){case 1:printf("\n\t添加记录到通讯录\n"); /*添加记录*/n=Input(pe,n);break;case 2:printf("\n\t\t\t 通讯录记录表\n"); /*显示记录*/Display(pe,n);break;case 3:printf("\n\t从通讯录中删除记录\n");n=Delete_a_record(pe,n); /*删除记录*/printf("\t");system("pause");break;case 4:printf("\n\t在通讯录中查找记录\n");Query_a_record(pe,n); /*查找记录*/printf("\t");system("pause");break;case 5:printf("\n\t修改通讯录中的记录\n");Change(pe,n); /*修改数据*/printf("\t");system("pause");break;case 6:printf("\n\t保存功能\n");WritetoText(pe,n); /*保存数据*/printf("\t");system("pause");break;case 0:printf("\n\t\t谢谢使用,再见!\n"); /*结束程序*/printf("\n\t\t");system("pause");exit(0);}}}四、通讯录工作流程图①添加:添加通讯录记录②显示:显示通讯录记录③删除:删除通讯录记录④查询:查询通讯录记录⑤修改:修改通讯录记录先选择查询方式,以姓名查询方式为例五、调试过程1).显示的主菜单界面2).删除界面:3).查询界面:4).保存界面:六、程序有待改进的地方源程序运用了大量的数组、循环、选择结构、函数调用,以及少量使用指针指向结构,涵盖了我们所学到绝大多数知识。
通讯录程序设计报告
前言一、设计内容与设计要求1.设计目的:当今时代是飞速发展的信息时代。
在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。
计算机的最大好处在于利用它能够进行信息管理。
使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
本系统就是为了管理而设计的。
通讯录管理系统的建立是可以有效节省同学、朋友、客户间日常交流的投资(指时间、精力),其设计理念很简单,变传统的纸张与笔录方式为计算机自动化进行通讯录信息管理系统,既省时间又提高效率。
因此在系统构建时,只要我们本着丰富通讯录的信息资源,为用户提供最为方便的快捷的信息阅览途径和管理手段,去吸引用户,那么通讯录管理系统是完全可行的。
通讯录软件设计的灵感来源于生活和工作中的需要。
如今,随着社会的飞速发展,信息时代改变着人们的各种生活方式。
人们的联系信息,联系方式变得复杂而多样化,以前所使用的各种电话簿、通讯本等小册子由于查找不方便、功能单一等缺陷已经无法胜任它的“时代使命”,而现在各种手机,商务通内设的电话簿尽管携带方便却又挥之不去其“记录量少,界面小,浏览不方便”的缺点。
工作中看到有些人巧妙地利用excell或者word制表格来建立通讯录,每逢用时再打开,可是查找极其不便,维护起来也麻烦。
通讯录系统设计,它的内容对于计算机来说是至关重要的,通讯录系统为计算机的使用者提供充足的信息和快捷的查询手段。
用c语言构建的通讯录系统设计,通过课上学到的和查阅一些文献的一些关于结构体[1]、数组、指针、函数以及循环函数的运用[1]和字符串的处理[2]等基本知识可以初步的实现通讯录的输入、显示、查找、删除、快速查询等通讯录简单而用的一些实用的功能,给人们带来更多的方便。
本管理系统设计合理、操作方便、运行稳定、功能完备,具有较高的实用价值。
C语言程序设计报告——通讯录管理系统
C语言程序设计报告一.课题通讯录管理系统二.设计方案简介为了帮助广大人群解决笔记通讯录所带来的诸多不便,本人利用所学的专业知识,设计了一个简单,便利的系统供大家在线存储众多联系人信息。
这样做一来可以将自己的知识生活化,运用自己所学为他人做点事,二来,在完成这项任务的过程中,通过克服一道又一道难题,我巩固了自己的知识,发现了自己的不足,进而提升了自己的能力。
该方案从整体出发,化整为零。
各个功能都是通过独立函数实现。
其中设计了信息录入,信息查询,信息修改,信息删除,信息保存,信息显示等功能。
方案的结构一目了然,便于用户操作。
经过在Microsoft Visual C++ 6.0中多次测试,结果均与预期相符。
加上该程序要求的平台不是很高,一般用户均可方便使用。
三.算法与数据结构<一>运用的数据类型有:int, char, file,.<二>主要功能模块的算法设计思路如下:1、添加信息函数(void Add(Link l))(1)定义指向结构体变量的指针;(2)移动指针,找到插入结点;(3)在要插入的结点输入信息;(4)调用保存函数,打开文件,保存输入信息。
2、修改信息函数(void Modify(Link l))(1)定义指向结构体变量的指针;(2)用指针检验链表中是否有记录,若没记录,返回主函数;(3)根据要修改的编号查找对应结点;(4)修改信息;(5)打开文件,保存修改记录。
3、删除信息函数(void Del(Link l))(1)定义指向结构体变量的指针;(2)用指针检验链表中是否有记录,若没记录,返回主函数;(3)根据要修改的编号查找要删除的结点;(4)修改链表,删除对应结点。
4、显示记录函数(void Disp(Link l))(1)打开文件;(2)用指针检验是否有记录;(3)若无记录,输出提示信息,返回主函数;若有记录,移动指针,依次输出记录;(4)关闭文件。
5、查询通讯录信息(void Find(Link l))(1)选择查询方式(按姓名、编号或地址);(2)输入查询关键字:(3)在链表中寻找相应结点;(4)调用输出函数,输出结点信息。
android程序设计报告(手机通讯录)
Android实验报告课程名称 Android应用程序开发题目名称 Android通讯录学生学院计算机学院班级学号学生姓名指导教师2012年06 月11日一.程序名称:Android通讯录二.主要功能:本手机通讯录工具主要实现五大功能:联系人的查询:字段查询,分组查询,字母排序查询;增加、删除联系人以及修改联系人信息;导入、导出联系人;发送联系人信息;设置。
三.功能实现概述:2.1 UI设计我们用一个ListView来显示整个通讯录,其中用TextView显示每一记录,他们的xml文件分别为:通讯录主界面,添加联系人界面,浏览联系人界面,查找联系人界面。
2.2 数据库的设计Android中的android.database.sqlite.SQLiteOpenHelper 类是一个专门用于数据库创建和版本管理的辅助类。
因此,为了更好的管理数据库,这里我们创建一个继承自SQLiteOpenHelper的辅助类DBHelper来维护和更新数据库。
2.3功能的设计为了在主界面中浏览联系人的信息,并且创建主要菜单栏,我们设计了MainActivity类,主要用于显示联系人信息和菜单栏,通过菜单栏,实现通讯录的相关功能。
AddressBook类主要是为了实现联系人的添加功能,并且实现信息的保存后跳转到主界面。
Findactivity类主要是为了实现联系人的查找功能,输入联系人的姓名,点击查找按钮,显示所查联系人的相关信息。
四.程序截图:测试手机:三星Galaxy Nexus手机系统版本:4.0.2模拟环境:安卓4.0.3图1:主界面 1 图2:主界面2图3:主界面3 图4:创建联系人图5:编辑联系人 图6:删除联系人五. 课程总结通过设计该通讯录,主要学习了UI 设计、数据库的综合操作、动态菜单的使用以及各种权限的注册。
通过本次设计,使我对Android 平台的数据库操作有了更进一步的理解,同时也对Android 系统有了更深入的了解。
通讯录详细设计报告
软件测试实训-2详细设计报告项目名称: 通讯录管理系统(CS04)负责人:日期:注:(按照书上的顺序,每个项目一个编号,附在项目名称后面,如三角形问题CS01)详细设计说明书作用范围该详细设计说明书讨论的是“通讯录管理系统”各模块的详细设计。
系统目标1.后台数据库设计,后台需要建立Adrress数据库,维护两个表groupInfo和people。
并且利用windows的ODBC和前台连接。
2.前台使用MCF 的CRecordset派生类实现和后台通讯。
3.前台利用CDialog派生类实现用户界面,显示系统信息,接受用户的输入和结果显示。
后台数据库设计1.组信息表groupInfo结构2.联系人信息表people结构3.表关系结构前台设计描述数据描述1.主窗口类 CAddressListDlg,关联主用户界面,实现主要的程序逻辑。
主界面上的主要控件有:IDC_TREE_LIST,IDC_STATIC,IDC_EDIT,IDC_BUTTON……。
2.CGroupInfo类成员变量:long m_id;CString m_groupName;3.CPeople类成员变量:long m_id;long m_groupId;CString m_fullName;BOOL m_sex;CString m_company;CString m_phoneInCompany;CString m_homeAddress;CString m_phineInHome;CString m_mobile;CString m_mail;CString m_qq;CString m_msn;CString m_memory;4.界面编辑信息数据结构typedef struct{CString strName;bool bSex;CString strCompany;CString strPhoneInCompany;CString strHomeAddress;CString strPhoneInHome;CString strMobile;CString strMail;CString strQq;CString strMsn;CString strMemory;}INTERFACECTRLDATA;主要功能实现函数1.添加组✧函数名 OnButtonAppendgroup()✧主要流程,用户点击“增加组”,输入新组名,选择确认/放弃,确认后,调用添加联系人组函数CappendNewGroupDialog::OnOk()。
C语言程序设计报告书(手机通讯录)
此处所用字符函数 “strcpy”,由于删 除联系人后,需要进 行重新编号,故选将 第“q+1”个联系人 的信息复制给第“q” 个联系人。
ห้องสมุดไป่ตู้
PPTFLY
增加功能(APPEND)
void APPEND(int j) /*添加联系人的相关信息*/ { int n; fri[j].num=j+1; printf("Number:%d\n",j+1); printf("Name:"); scanf("%s",fri[j].name); printf("Kind:"); scanf("%s",fri[j].classify); printf("Telephone:"); scanf("%s",fri[j].telephone); printf("Mail:"); scanf("%s",fri[j].mail); }
c语言程序设计报告书手机通讯录c语言通讯录程序设计c语言程序设计报告书c语言通讯录课程设计c语言通讯录程序通讯录管理系统c语言c语言通讯录c语言通讯录代码用c语言编写通讯录c语言通讯录源代码
PPTFLY
C语言程序设计报告
报告人:曾强 学号:05311130 专业:工程力学
通讯录管理系统(A级)
模拟手机通讯录管理系统,初始通讯录信息由文本文件
if(i=20)
printf("\nThe room is full");break; case 2:SHOW(fri);getch();break; case 3:DIAL(fri);getch();break; case 4:CORRECT(fri);getch();break; case 5:DELETE(fri[i]);getch();break; case 6:exit(0); }
python通讯录程序设计总结报告
python通讯录程序设计总结报告Python通讯录程序设计总结报告1. 简介1.1 背景1.2 目的2. 功能概述2.1 添加联系人2.2 显示联系人列表2.3 搜索联系人2.4 编辑联系人2.5 删除联系人3. 设计思路3.1 数据结构选择3.2 程序流程3.2.1 添加联系人3.2.2 显示联系人列表3.2.3 搜索联系人3.2.4 编辑联系人3.2.5 删除联系人4. 代码实现4.1 添加联系人函数4.2 显示联系人列表函数4.3 搜索联系人函数4.4 编辑联系人函数4.5 删除联系人函数5. 测试与优化5.1 单元测试5.2 性能优化6. 结论6.1 成果总结6.2 反思与展望7. 个人观点与理解1. 简介1.1 背景随着信息技术的快速发展,人们需要处理大量的联系人信息。
传统的纸质通讯录已经无法满足现代人的需求,因此设计一个通讯录程序能够很好地解决这个问题。
1.2 目的本文旨在总结和报告设计一个基于Python的通讯录程序的过程。
通过设计和实现该程序,可以方便地添加、编辑、删除和搜索联系人的信息。
2. 功能概述2.1 添加联系人程序可以接收用户输入联系人的尊称、通信方式号码等信息,并将其保存到通讯录中。
2.2 显示联系人列表程序可以将通讯录中的所有联系人按一定的格式展示给用户,方便查看和管理。
2.3 搜索联系人用户可以根据联系人的尊称或其他关键词进行搜索,并返回相应的联系人信息。
2.4 编辑联系人用户可以对已存在的联系人进行编辑,修改其尊称、通信方式号码等信息。
2.5 删除联系人用户可以选择删除不需要的联系人信息。
3. 设计思路3.1 数据结构选择为了高效地存储联系人信息,可以选用字典或者列表等数据结构。
其中,字典可以根据联系人的尊称作为键,存储联系人的各种信息;列表则是将每个联系人信息存储为一个独立的对象。
3.2 程序流程3.2.1 添加联系人用户在程序中输入联系人信息后,程序将这些信息保存到通讯录数据结构中。
通讯录管理程序设计报告
{
cin>>>>e.sex>>e.phone>>e.group>>e.addr>>e.e_mail;
ListInsert_Sq(L,e);
wfile.write((char *)(&e),sizeof(ElemType));
}
wfile.close();
{
ElemType *p=new ElemType[L.listsize+L.incrementsize];
for(int i=0;i<L.length;i++)
p[i]=L.elem[i];
delete [] L.elem;
tsize+L.incrementsize;
保存通讯录
将保存在线性表的联系人信息存入指定的磁盘文件。
调用通讯录
将保存在磁盘文件中的通讯录调入内存的线性表中。
4测试结果
在VC++6.0下运行程序,屏幕提示新建通讯录,输入文件名及若干联系人后,出现程序主菜单,如下图所示
(1)保存与打开通讯录功能测试
在上图中,选出5保存通讯后,退出重新运行通讯录,结果如下图,说明存盘的内容已调入内存并显示。
通过对通讯录管理的需求分析,系统应包括以下功能:
⑴添加联系人信息
⑵编辑修改联系人信息
⑶查询联系人信息,能根据姓名、电话号码、群组等进行查询
⑷删除联系人信息
⑸以某种顺序输出联系人信息
⑹文件操作:能将联系人的信息保存到磁盘文件,并且可以从文件中读出所有信息
⑺排序:能够对所有联系人按姓名、电话号码等进行排序。
C++通讯录程序报告
宁波工程学院电信学院课程设计报告书二○一二~二○一三学年第一学期课程名称:面向对象程序设计班级:计科11-3学号:11401010306姓名:汪梦莹指导教师:盛啸涛二○一二年九月一、题目能够利用所学的基本知识, 设计一个简单的学生信息管理应用程序,具有以下功能:1、实现个人通讯信息的存储,用文件来实现。
2、编程实现个人通讯信息的添加、删除、修改、浏览和查询等功能。
二、实验目的目的是了解程序设计语言的基础知识,掌握面向对象程序设计的基本思路和方法,掌握用VC++开发应用程序的的一般步骤和方法。
一方面通过对程序算法的设计和分析提高我们对问题进行文字论述和文字表达的能力并且培养我们进行知识综合,软件开发和软件的调试技术,开发较大程序的能力。
另一方面培养了我们相互合作的精神并培养了我们的创新意识。
三、组员与权重汪梦莹1四、需求分析本通讯录可实现以下功能:1) 通讯录编辑(添加、删除);2) 按不同的项进行查找;3) 对已存在的通讯录按不同的项排序;4) 将通讯录写入文件;5) 从文件读入通讯录。
五、模块设计本次程序设计主要设计了六个模块(主要是:a.add(),a.del(),a.correct(),a.find1(),a.list1(),a.read(),a.write())数据流程图a.add()函数用于通讯录中的信息进行添加,主要流程如下:a.del()函数用于通讯录中的信息进行删除,主要流程如下:a.correct()函数用于通讯录中的信息进行修改,主要流程如下:a.find1()函数用于通讯录中的信息进行查找,主要流程如下:a.list1()函数用于通讯录中的信息进行排序,主要流程如下:a.read()函数用于从文本文件中读取信息,主要流程如下:a.write()函数用于将信息写入文本文件,主要流程如下:六、流程图七、详细设计结构数组:struct student //结构体{char no[13]; //学号char name[20]; //姓名char address[100]; //地址char tel_no[12]; //电话char post_code[7]; //邮编char e_mail[40]; //E-mail}class inter //派生类{private: //派生类增加或替代的私有成员student st[35];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()//成员函数,返回首页void print(int i)//成员函数,输出显示}八、实验结果运行程序,首页显示如下:按1选择通讯录编辑,编辑通讯录,显示(1)添加联系人,(2)删除联系人,(3)修改联系人,运行后结果如下:第一次使用,按1添加联系人,填入相关信息,运行图如下:返回首页,按2可以查找联系人,可以根据姓名查找和学号查找返回首页,按4可以进行排序,可以根据姓名和学号排序,按姓名排序需要自己编辑的姓氏排序规则才能使用将资料写入文件功能是将编辑好的通讯录写入文本文件,文本文件的名字可以自己输入。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前言一、设计内容与设计要求1.设计目的:当今时代是飞速发展的信息时代。
在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。
计算机的最大好处在于利用它能够进行信息管理。
使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
本系统就是为了管理而设计的。
通讯录管理系统的建立是可以有效节省同学、朋友、客户间日常交流的投资(指时间、精力),其设计理念很简单,变传统的纸张与笔录方式为计算机自动化进行通讯录信息管理系统,既省时间又提高效率。
因此在系统构建时,只要我们本着丰富通讯录的信息资源,为用户提供最为方便的快捷的信息阅览途径和管理手段,去吸引用户,那么通讯录管理系统是完全可行的。
通讯录软件设计的灵感来源于生活和工作中的需要。
如今,随着社会的飞速发展,信息时代改变着人们的各种生活方式。
人们的联系信息,联系方式变得复杂而多样化,以前所使用的各种电话簿、通讯本等小册子由于查找不方便、功能单一等缺陷已经无法胜任它的“时代使命”,而现在各种手机,商务通内设的电话簿尽管携带方便却又挥之不去其“记录量少,界面小,浏览不方便”的缺点。
工作中看到有些人巧妙地利用excell或者word制表格来建立通讯录,每逢用时再打开,可是查找极其不便,维护起来也麻烦。
通讯录系统设计,它的内容对于计算机来说是至关重要的,通讯录系统为计算机的使用者提供充足的信息和快捷的查询手段。
用c语言构建的通讯录系统设计,通过课上学到的和查阅一些文献的一些关于结构体[1]、数组、指针、函数以及循环函数的运用[1]和字符串的处理[2]等基本知识可以初步的实现通讯录的输入、显示、查找、删除、快速查询等通讯录简单而用的一些实用的功能,给人们带来更多的方便。
本管理系统设计合理、操作方便、运行稳定、功能完备,具有较高的实用价值。
2。
设计内容:设计与开发一个通讯录管理系统,对通讯录中的姓名、单位、电话、QQ 、mail等基本信息进行管理、主要功能如下:输入记录、显示记录、按姓名查找显示记录、删除记录、插入记录、记录保存为文件、从文件中读记录、按姓名排序、显示单条记录。
本系统首先设计出了主函数,然后根据去要实现的功能分别设计拉,显示、删除、查找、添加等功能的子函数。
在显示的函数设计过程中首先运用拉文件的读取等必要的知识通过把文件的内容读取到内存然后打印出来。
删除函数的设计是首先从文件内找到要删除的人,然后通过写一个实现删除目的的FOR循环将该人从内存里删除,然后再用写的方式打开文件,将内存内的信息写入文件,实现删除。
查找也是先打开文件,用一个字符串对比的方法找出用户要查找的人,然后打印出来。
修改也大体和删除相同,添加函数在设计时通过申请一片空间,然后通过指针将需要添加的信息添加进去,从而实现添加功能。
本课程设计主要运用C语言中的结构体、数组、链表、等数据结构,设计一个简单的管理系统应用程序。
本程序设计出了通讯录管理系统的基本功能,并设计了简单的界面,主要考察对自定义函数的熟悉程度,使用的是数组的相关操作,包括结构体数组的输入、输出、查找、删除等。
通过完成本课题进一步熟悉C语言基本知识,并掌握数据结构的一些基本算法思想,进一步熟悉指针的用法,数组的建立运用和函数调用,加深对数据结构的理解,提高算法设计的能力,锻炼编程的能力。
2.设计要求:1).设计正确,方案合理。
2).界面友好,使用方便。
3).程序精炼,结构清晰。
4).设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。
5).建立通讯录信息,信息至少包含姓名、电话、通讯地址;6).能够提供添加、删除和修改通讯录信息的功能;7).能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询;8).将通讯录保存在文件中;9).能够按表格方式输出通讯录信息。
10).实际操作过程中遇到的问题及解决方法:设计总结及心得体会.11).上机演示。
二、进度安排第十九周星期一 12:30——16:30星期二 12:30——15:00星期二 18:30——22:00星期四 12:30——15:00附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。
正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。
正文总字数要求在5000字以上(不含程序原代码)。
目录一.系统主要功能 (5)1.输入通讯记录 (5)2.显示通讯记录 (5)3.查找通讯记录 (5)4.删除通讯记录 (6)5.插入通讯记录 (6)6.保存通讯记录 (7)7.读入通讯记录 (7)8.对通讯记录排序 (8)9.快速搜索通讯记录 (8)二.系统功能模块划分 (9)三.功能模块的实现 (10)1.主函数流程图 (10)2.详细流程图 (11)四.程序调试 (23)1.菜单函数 (23)2.输入记录数 (24)3.显示记录 (24)4.查找记录 (25)5.删除记录 (26)6.插入记录 (27)7.保存文件 (27)8.读入文件 (28)9.按序号排列函数 (28)10.排序函数 (29)11.快速查找函数 (30)12.复制函数 (31)13.退出函数 (31)五.总结 (32)六.附件 (33)1.源程序代码 (33)2.参考文献 (41)一.系统主要功能1.输入通讯记录输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度。
将结构体数组分成几个数组分别对每个数组赋值,用for循环来实现对不同地址的数组分别赋值。
for(i=0;i<n;i++){scanf("%s%s%s",t[i].name,t[i].units,t[i].tele); /*输入记录*/printf("----------------------------------------------\n");}然后返回输入值n。
2.显示通讯记录显示记录,参数为记录数组和记录条数。
再利用for循环来时先显示的记录。
for(i=0;i<n;i++){printf("%-20s%-20s%-20s\n",t[i].name,t[i].units,t[i].tele);}printf("************************end*******************\n");}此时程序会以printf("\n\n*******************ADDRESS******************\n");printf("name unit telephone\n");printf("------------------------------------------------\n");此种形式输出。
3.查找通讯记录查找记录,输入待查找信息,调用查找函数,通过条件语句来实现。
printf("please search name\n");scanf("%s",s); /*输入待查找姓名*/i=find(t,n,s); /*调用find函数,得到一个整数*/if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("not found\n");elseprint(t[i]); /*找到,调用显示函数显示记录*/}查找函数,参数为记录数组和记录条数以及姓名。
利用for循环加上条件语句的嵌套完成查找函数,返回i值。
for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{if(strcmp(s,t[i].name)==0) /*记录中的姓名和待比较的姓名是否相等*/return i; /*相等,则返回该记录的下标号,程序提前结结束*/}return i; /*返回i值*/}4.删除通讯记录删除函数,参数为记录数组和记录条数。
输入要删除的姓名,调用查找函数。
i=find(t,n,s); /*调用find函数*/再利用条件语句的嵌套来实现删除功能。
if(i>n-1) /*如果i>n-1超过了数组的长度*/printf("no found not deleted\n"); /*显示没找到要删除的记录*/else{print(t[i]); /*调用输出函数显示该条记录信息*/printf("Are you sure delete it(1/0)\n"); /*确认是否要删除*/scanf("%d",&ch); /*输入一个整数或*/if(ch==1) /*如果确认删除整数为*/{for(j=i+1;j<n;j++){strcpy(t[j-1].name,t[j].name);strcpy(t[j-1].units,t[j].units);strcpy(t[j-1].tele,t[j].tele);}n--; /*记录数减*/}5.插入通讯记录插入记录函数,参数为结构体数组和记录数。
先输入插入信息,再输入插入位置,然后调用查找函数i=find(t,n,s);找到插入位置,利用一个for循环,来实现一个信息的完整插入。
for(j=n-1;j>=i;j--) /*从最后一个结点开始向后移动一条*/{strcpy(t[j+1].name,t[j].name); /*当前记录的姓名拷贝到后一条*/strcpy(t[j+1].units,t[j].units); /*当前记录的单位拷贝到后一条*/ strcpy(t[j+1].tele,t[j].tele); /*当前记录的电话拷贝到后一条*/}strcpy(t[i].name,); /*将新插入记录的姓名拷贝到第i个位置*/ strcpy(t[i].units,temp.units); /*将新插入记录的单位拷贝到第i个位置*/ strcpy(t[i].tele,temp.tele); /*将新插入记录的电话拷贝到第i个位置*/ n++; /*记录数加*/return n; /*返回记录数*/}6.保存通讯记录保存函数,参数为结构体数组和记录数。