C++程序设计—电话簿管理系统

时间:2019-05-14 03:02:05下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C++程序设计—电话簿管理系统》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C++程序设计—电话簿管理系统》。

第一篇:C++程序设计—电话簿管理系统

XXXXXXXXXXXC/C++程序设计实训

电话簿管理系统

学生姓名 ×××× 学 号 ×××× 所在学院 ×××× 专业名称 ×××× 班 级 ×××× 指导教师

XXX

XXXXXXXXXXXXXXXX XXXXXXXXXXXX

目 录

1.前言··················································································································· 3 2.设计目的··········································································································· 3 3.功能描述··········································································································· 3 4.总体设计··········································································································· 4

1、功能模块设计···························································································· 4

2、数据结构设计···························································································· 6

3、函数功能描述···························································································· 7 5.程序实现··········································································································· 7

1、源程序(略)···························································································· 7

2、运行结果···································································································· 7 6.小结··················································································································· 9

1.前言

随着科技的进步和信息产业的飞速发展,电话簿成为了现代生活中一个重要的工具。本电话簿管理系统利用计算机对通讯录进行统一管理,包括添加、修改、查询记录等功能,实现通讯录管理工作的系统化、规范化和自动化,为人们的工作和生活提供便利。本程序是利用结构数组实现此电话簿管理系统。

2.设计目的

本程序旨在训练基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和结构数组的各种基本操作。本程序中涉及结构体、数组、文件等方面的知识。通过本程序的训练,能对C语言的文件操作有一个更深刻的了解,掌握利用数组存储结构实现电话簿管理的原理,为进一步开发出高质量的信息管理系统打下坚实的基础。

3.功能描述

如图1所示,电话簿管理系统主要利用数组来实现,其数组元素是结构体类型,整个系统由如下几大功能模块组成。

电话簿管理系统输入记录模块查询记录模块更新记录模块输出记录模块从文件读入从键盘读入按姓名查询按电话查询修改记录删除记录插入记录排序记录输出至文件输出至屏幕(1)输入记录模块。输入记录模块主要完成将数据存入数组中的工作。在此电话簿管理系统中,记录可以从以文本形式存储的数据文件中读入,也可从键盘逐个输入记录。记录由与联系人有关的基本信息字段构成。当从数据文件中读入记录时,它就是在以记录为单位存储的数据文件中,将记录逐条复制到结构体类型的数组元素中。

(2)查询记录模块。查询记录模块主要完成在数组中查找满足相关条件的记录。在此电话簿管理系统中,用户可以按照联系人姓名或联系人电话号码在数组中进行查找。若找到该记录,则以表格形式打印出此记录的信息;否则,返回一个-1的值,并打印出未找到该记录的提示信息。

(3)更新记录模块。更新记录模块主要完成对记录的维护。在此电话簿管理系统中,它实现对记录的修改、删除、插入和排序操作。一般而言,系统进行了这些操作之后,需要将修改的数据存入源数据文件。

(4)输出记录模块。输出记录模块主要完成两个任务。第一,它实现对记录的存盘操作,即将数组中各元素中存储的记录信息写入数据文件中。第二,它实现将数组中存储的记 图1 电话簿管理系统功能模块 录信息以表格的形式在屏幕上打印显示出来。

4.总体设计

1、功能模块设计

(1)主控main()函数执行流程

电话簿管理系统执行主流程如图2所示。它先以可读写的方式打开文本类型的数据文件,此文件默认为“c:telephon”,若该文件不存在,则新建此数据文件。当打开文件操作成功后,从文件中一次读出一条记录,添加到新建的数组中,然后执行显示主菜单和进入主循环操作,进行按键判断。值得一提的是,文本类型文件与二进制类型文件不同,它可以使用Windows自带的记事本打开并查看到存储的文件内容。

开始以可读写的方式打开一个数据文件将此文件的内容读出,并存入一个新的结构体类型的数组中调用emnu()菜单函数进入while(1)主循环输入0~8中的一个数值,选择相应操作输入是否为0?是否判断键值,调用相应函数,完成相应功能是否已对修改进行了存盘?否调用Save()函数,进行写数据文件操作是结束

图2 主控函数执行流程图

在判断键值时,有效的输入为0-8之间的任意数值,其他输入都被视为错误按键。若输入为0(即变量select=0),则会继续判断是否在对记录进行了更新操作之后进行了存盘操作,若未存盘,则全局变量saveflag=1,系统会提示用户是否需要进行数据存盘操作,用户输入 Y或y,系统会进行存盘操作。最后,系统执行退出电话簿管理系统的操作。

若选择1,则调用Add()函数,执行增加记录操作;若选择2,则调用Disp()函数,执行将记录以表格形式打印输出至屏幕的操作;若选择3,则调用Del()函数,执行删除记录操作;若选择4,则调用Qur()函数,执行查询记录操作:若选择5,则调用Modify()函数,执行修改记录操作;若选择6,则调用lnsert()函数,执行插入记录操作;若选择7,则调用SelectSort()函数,执行按升序排序记录的操作;若选择8,则调用Save()函数,执行将记录存入磁盘中的数据文件的操作:若输入为0-8之外的值,则调用Wrong()函数,给出按键错误的提示。

(2)输入记录模块

输入记录模块主要实现将数据存入数组中。当从数据文件中读出记录时,它调用fread(&tele[count],sizeof(TELEBOOK), l,fp)文件读取函数,执行一次从文件中读取一条电话簿记录信息存入某个数组元素中的操作,并且这个操作在main()中调用执行,即在电话簿管理系统进入显示菜单界面时,该操作己经执行了。若该文件中没有数据,则系统会提示数组为空,没有任何记录可操作,此时,用户应选择1,调用Add()函数,进行记录的输入,即完成在数组中添加元素的操作。

(3)查询记录模块

查询记录模块主要实现在数组中按联系人姓名或电话查找满足条件的记录。在查询函数Qur()中,为了遵循模块化编程的原则,对在数组中进行的记录定位操作设计成了一个单独的函数int Locate(TELEBOOK temp[],int n,char findmess[],char nameorphonenum[]),参数findmess[]保存要查找的具体内容,nameorphonenum[]保存要查找的字段(值为字特串类型的name或phonenum),若找到该记录,则返回指向该记录的数组元素的下标;否则,返回一个-1的值。

(4)更新记录模块

更新记录模块主要实现了对记录的修改、删除、插入和排序操作。因为记录是以数组的结构形式存储的,所以这些操作都在数组中完成。下面分别介绍这4个功能模块。

1)修改记录

修改记录操作需要对数组中目标元素的数据域中的值进行修改,它分两步完成。第一步,输入要修改的联系人姓名,输入后调用定位函数Locate()在数组中逐个对联系人姓名字段的值进行比较,直到找到该联系人姓名的记录;第二步,若找到该记录,修改除记录编号之外的各字段的值,并将存盘标记变saveflag置1,表示已经对记录进行了修改,但还未执行存盘操作。

2)删除记录

删除记录操作完成删除指定联系人姓名或电话号码的记录,它也分两步完成。第一步,输入要修改的联系人姓名或电话号码,输入后调用定位函数Locate()在数组中逐个对联系人姓名或电话号码字段的值进行比较,直到找到该联系人姓名或电话号码的记录,返回指向该记录的数组元素下标;第二步,若找到该记录,则从该记录所在元素的后续元素起,依次向前移一个元素位置,有值的数组元素个数减1,其具体过程如图3所示,在删除了数组元素A2后,数组元素A3和A4向前移动了一个位置

A0删除A2前A0删除A2后A1A1A2A3A3A4A4

图3 数组中删除记录示意图

3)插入记录 插入记录操作完成在指定记录编号的随后位置插入新的记录。首先,它要求用户输入某个记录编号,新的记录将插入在该记录之后、然后,提示用户输入一条新的记录的信息,这些信息保存在新结构体类型的数组元素的各字段中;最后,将该元素插入在已经确认位置的记录编号之后。它的具体插入执行过程如图4所示,新元素B1准备插入至已有5个元素的数组中,插入位置为元素A2之后。这具体过程为:先调用Locate()函数找到A2在数组中的下标,从A4开始,往后移动,至A2停止移动,然后在原A3的位置插入元素B1。

插入B1A0插入B1前A0插入B1后A1A2B1A3A4A1A2A3A4

图4 数组中插入记录示意图

4)排序记录

选择排序法也属于内部排序法中的一种,它是运用字段值比较后,从欲排序的数组元素中,按指定规则选出其字段值最小的元素,并依原则交换数组元素位置后,更新欲排序的数组元素,以达到排序的目的。这里我们采用这种排序法来实现按照记录编号或联系人姓名字段的值从低到高对记录进行升序排序。对按照记录编号排序方式而言,我们将按其数值大小来排序;对按照联系人姓名排序方式而言,我们将按其姓名字符ASCII码的大小来排序。

选择排序的方法为:从欲排序的n个数组元素中,以线性查找的方式找出最小的元素和第一个元素交换,再从剩下的(n-1)个数组元素中,找出最小的元素和第二个元素交换,以此类推,直到所有元素均已排序完成。

将相邻的两个数组元素的电话簿字段的值进行比较,若左边的值小于右边的值,则将此两个元素的值进行交换;若左边的值大于等于右边的值,则此两个值的位置不变。右边的值继续和下一个值做比较,重复此动作,直到比较到最后一个值,最终实现了升序排序。选择排序法是最简单的排序法,但选择排序法所需的排序时间比其他排序法长。

(5)输出记录模块

当把记录输出至文件时,调用fwrite(&temp[i],sizeof(TELEBOOK),L,fp)函数,将数组元素temp[i ]中各字段的值,写入文件指针fp所指的文件:当把记录输出至屏幕时,调用void Disp()函数,将数组中存储的记录信息以表格的形式在屏幕上打印出来。

2、数据结构设计

本程序定义了结构体telebook,用于存放联系人的基本信息。这里仅有3 个与联系人有关的字段,读者可以按照需要扩展相关字段。

typedef struct telebook { char num[4];char name[10];char phonenum[15];char address[20];}TELEBOOK;其各字段的值的含义如下:  num[4]:保存记录编号。 name[10]:保存联系人姓名。 phonenum[15]:保存联系人的电话号码。 address[20]:保存联系人地址。

3、函数功能描述

1)printheader()函数原型:void printheader()printheader()函数用于在表格形式显示记录时,打印输出表头信息。2)printdata()函数原型:void printdata(TELEBOOK pp)printdatan()数用于以表格显示的方式,打印输出单个数组元素pp中的记录信息。3)Disp()函数原型:void Disp(TELEBOOK temp[],int n)Disp()函数用于显示temp数组中存储的n条记录,内容为telebook结构中定义的内容。其余函数功能描述省略,请同学们在自己写的时候写完整。

5.程序实现

1、源程序(略)

2、运行结果

(1)主界面

图5 主界面

当用户刚进入电话簿管理系统时,其主界面如图5所示。此时,系统己经将“c:telephon”文件打开,若文件不为空,则将数据从文件中逐条记录读出,并写入数组中。用户可选择0-8之间的数值,调用相应功能进行操作。当输入为0时,退出此管理系统。

(2)输入记录

当用户输入1并按Enter键后,即可进入数据输入界面。其输入记录过程如图6所示,这里输入了3条记录。当用户输入为0的记录编号时,它会结束输入过程,返回到主菜单界面。

(3)显示记录

当用户执行了输入记录或已经从数据文件中读取了记录之后,即可输入2并按Enter键,查看当前数组中的记录情况,如图7所示,此时表中有3条记录。

图6 输入记录

图7 显示记录

(4)删除记录

当用户输入3并按Enter键后,即可进入记录删除界面。其删除记录过程如图8所示,这里按联系人姓名删除了一条姓名为A1的记录。

图8 删除记录

(5)查找记录

当用户输入4并按Enter键后,即可进入记录查找界面。其查找记录过程如图9所示,8 用户可按姓名或电话号码进行记录查找。

图9 查找记录

(6)修改记录

当用户输入5并按Enter键后,即可进入记录修改界面。其修改记录过程如图10所示,这里修改了姓名为a2的联系电话和地址字段。

图11 修改记录

(7)插入记录

当用户输入6并按Enter键后,即可进入记录插入界面。其插入过程如图11所示,这里在记录编号为3的记录后插入了一条记录编号为5的记录。

(8)排序记录

当用户输入7并按Enter键后,即可进入记录排序界面。用户可以选择按照记录编号或联系人姓名进行排序,图12为按记录编号进行记录升序排序的结果。

(9)保存记录

当用户输入8并按Enter键后,即可进入记录保存界面。其保存结果提示信息如图13所示,这里有3条记录已经存储至磁盘数据文件c:telephon中。

6.小结

本文介绍了电话簿管理系统的设计思路及其编程实现,重点介绍了功能模块的设计原理和利用数组存储结构实现电话簿管理的过程。通过本程序的开发使我熟悉C语言下的文件和数组操作,了解管理信息系统(MIS)的开发原理,并注意利用选择排序法来实现数组元素 排序的特点。

利用本电话簿管理系统可以对通讯录进行日常维护和管理。

第二篇:C++课程设计电话簿管理

C++课程设计

————简单电话簿管理

报告内容: 一.程序功能简介 二.课程设计要求 三.课程设计说明 四.参考数据结构 五.具体功能及实现六.源程序及注释 七.感想与心得

学号:050930109 姓名:陈浩 指导老师:臧洌 日期:2010年6月20日

一.程序功能简介

一个基本的电话簿管理程序,具有插入、删除、显示、修改和查询联系人电话码的功能。主菜单如右图所示,每个菜单项功能如下:

1.增加记录菜单:请输入用户姓名,如果该用户已经存在则添加失败,否则,输入用户的电话号码,进行添加。

2.修改某条记录:请输入用户姓名,如果没有该用户显示“ 该用户不存在”信息,否则,输出原电话号码,然后输入新的电话号码,进行修改。3.删除记录:

输入用户姓名,进行删除(删除时要进行确认)。4.查询:输入用户姓名,进行查找。

5.排序:根据子菜单,选择不同的排序方式。6.显示:逐屏显示(每屏显示10条记录)。7.全删:进行全部删除(要确认)。

二.课程设计要求

请选择以下功能 1-增加记录 2-修改记录 3-删除记录

4-查找(按姓名)5-排序 6-显示记录

1.用汉化菜单实现。

2.提供按姓名查询电话号码的功能。

3.显示功能(提供逐屏显示的功能,每屏显示10条记录)。4.删除和修改时要进行确认。

5.将电话簿记录以文件的形式存在磁盘上;每次操作时将电话簿调出,操作完毕后存盘。

三.课程设计说明

1.程序采用数组数据结构实现。2.用类来实现数据的封装。

四.参考数据结构

1.“电话簿”称为用户信息表,用数组实现。用户信息表由若干用户信息构成,每个用户信息是一个数组元素。

2.“user.txt”是一个文件,用于保存“用户信息表”中的信息。当系统启动时,从该文件中读入信息,当退出系统时,将“用户信息表”中的信息写到该文件中。该文件中信息存放形式如下:

ZhangHong 5221369 LiLi 84891112

ZhaoQiang 5221498

其中 name(姓名)占20列 phone_num(电话号码)占12列

五.具体功能及实现

定义Fphone类,通过其私有成员数组name[20]和phone[12]分别记录用户姓名与电话号码,定义UserDatabase类记录用户信息,通过公有成员函数实现对数据的操作。

六.源程序及注释

#include #include #include #include #include #define M 20 #define N 12 #define MAX 100 class Fphone

//用户信息类的定义 {

char name[M];

// 姓名

char phone_num[N];

//电话号码 public: Fphone(char *na=“",char *ph=”“){ strcpy(name,na);

strcpy(phone_num,ph);} char*getname();

//获取姓名

char*getphone_num();

//获取电话号码

void setname(char*a);

//设置姓名

void setphone_num(char*a);//设置电话号码

void disp();

//显示用户信息 };char *Fphone::getname()

{ return name;} char *Fphone::getphone_num(){ return(phone_num);} void Fphone::setname(char *a){ strcpy(name,a);

} void Fphone::setphone_num(char*a){ strcpy(phone_num,a);} void Fphone::disp(){ cout<<”姓名:“<//用户信息表类的定义 { int nElem;

//用户信息表中的元素个数,即当前记录总数

int Maxu;

//最多的用户

Fphone *user;

//指向用户信息表的指针

public: UserDatabase()

//构造函数,初始化用户信息表,将user.txt文件中数据读到User[]中

{ nElem=0;

Maxu=50;

user=new Fphone[Maxu];

fstream in;

in.open(”user.txt“,ios::in|ios::nocreate);//打开文件

for(int i=0;(!in.eof());i++)

{ in>>user[i].getname();in>>user[i].getphone_num();

nElem++;

}

in.close();}

~UserDatabase()

//析构函数,将user[]写入user.txt文件中

{ fstream out;

Fphone *p=NULL;

p=user;

out.open(”user.txt“,ios::out,filebuf::sh_none);

for(int i=0;i

{ out<getname())<

<<((p+i)->getphone_num())<

}delete []user;

out.close();} void clear()

//删除所有用户信息

{ char ord;

cout<<”确定删除吗?(选择:[y]是;[n]否)aa“<

do

{ cin>>ord;

if(ord=='N'||ord=='n')return;

else if(ord=='Y'||ord=='y')

{ delete[Maxu]user;

} user=0;cout<<”删除成功啦!“<

user->setname(na);

user->setphone_num(ph_num);

} else if(nElem=0;i--)

{ if(strcmp((user+i)->getname(),na)>0)

{(user+i+1)->setname(((user+i)->getname()));

(user+i+1)->setphone_num(((user+i)->getphone_num()));

}

else break;

}

(user+i+1)->setname(na);

(user+i+1)->setphone_num(ph_num);

nElem++;} else cout <<”空间不足,无法添加!“<

//返回user指针 { return(user);} void delete_record(Fphone *p,int k)

//删除用户信息 { char con;cout<<”确认删除?(Y/N)“;cin>>con;if(con=='N'||con=='n')return;else if(con=='Y'||con=='y'){ for(int i=k;i

{ user[i]=user[i+1];}

nElem--;

cout<<”已删除!“<

return;} else

{ cout<<”输入错误!“<

system(”pause“);

return;} } void modify_record(Fphone *p,char*ph_num)//修改用户信息 { p->setphone_num(ph_num);} Fphone *query(char *na)

//按姓名查找 顺序查找,这里也可以用折半 { Fphone *p=user;

int i=0;

while(1)

{ if(strcmp(p->getname(),na)==0)

return p;

p++;

if(i++==nElem)

break;} return NULL;} void sorta_name()//按姓名升序排序 插入排序法 { Fphone temp;int i,j;for(i=1;i

for(j=i-1;j>=0&&(strcmp(temp.getname(),user[j].getname())<0);j--)

{ strcpy(user[j+1].getname(),user[j].getname());

strcpy(user[j+1].getphone_num(),user[j].getphone_num());

}

strcpy(user[j+1].getname(),temp.getname());

strcpy(user[j+1].getphone_num(),temp.getphone_num());} } void sorta_phonenum()//按电话号码升序排序 选择排序法 { int i,j,p;Fphone temp;for(i=0;i

for(j=i+1;j

if(strcmp(user[j].getphone_num(),user[p].getphone_num())<0)p=j;

if(p!=i)

{ strcpy(temp.getname(),user[p].getname());

strcpy(temp.getphone_num(),user[p].getphone_num());

strcpy(user[p].getname(),user[i].getname());

strcpy(user[p].getphone_num(),user[i].getphone_num());

strcpy(user[i].getname(),temp.getname());

strcpy(user[i].getphone_num(),temp.getphone_num());

} } } void sort_name()//按姓名降序排序,将排成升序的对象数组逆向放置 { Fphone temp;int i,m=(nElem+1)/2;for(i=0;i

strcpy(temp.getphone_num(),user[i].getphone_num());

strcpy(user[i].getname(),user[nElem-i-1].getname());

strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num());

strcpy(user[nElem-i-1].getname(),temp.getname());

strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());} } void sort_phonenum()//按电话号码降序排序 冒泡排序法 { Fphone temp;int i,m=(nElem+1)/2;for(i=0;i

strcpy(temp.getphone_num(),user[i].getphone_num());

strcpy(user[i].getname(),user[nElem-i-1].getname());

strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num());

strcpy(user[nElem-i-1].getname(),temp.getname());

strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());} } void disp(){ int i,n=0;cout<

cout<getname()

<getphone_num()<

n++;

if(n%10==0)

{ system(”pause“);

system(”cls“);

} }

cout<

请选择以下功能:“<

1-增加记录“<

2-修改记录“<

3-删除记录“<

4-查找(按姓名)“<

5-排序“<

6-显示记录“<

7-全删“<

0-退出“<

输入选择:“<

“<

“<

欢迎使用电话簿管理系统

“<

祝您使用愉快

“<

“<

system(”cls“);

menu();

int k;

cin>>k;

switch(k)

{ case 1:

{ system(”cls“)

cout<<”*****************************************“<

cout<<”

增加记录

“<

Fphone *t=NULL;

char w;

do

{ cout<<”请输入您要增加的用户的姓名“;

cin>>na;

t=(s.query(na));

if(t)

{ cout<<”用户已经存在,添加失败!!“<

else

{ cout<<”请输入用户的电话号码“;

cin>>ph_num;

s.add_record(na,ph_num);cout<<”您添加的信息为:“;cout<<”姓名:“<cout<<”成功添加“<

}

cout<<”是否继续?(Y or N)“<

cin>>w;} while(w=='Y');break;}

case 2: { system(”cls“);

cout<<”***************************************“<

修改记录

“<

char na[M],ph_num[N];

Fphone *t=NULL;

char w;

do

{ cout<<”请输入您要修改的用户的姓名“;

cin>>na;

t=s.query(na);

if(!t)

cout<<”没有该用户!“<

else

{ cout<<”该用户原号码为:“<getphone_num()<

cout<<”请输入新的电话号码“;

cin>>ph_num;

s.modify_record(t,ph_num);

cout<<”成功修改“<

}

cout<<”是否继续?(Y or N)“<

cin>>w;

}

while(w=='Y');

break;} case 3: { system(”cls“);

cout<<”********************************************“<

删除记录

“<

cout<<”************** ***************************“<

char w;

char na[M];

int k;

Fphone *p;

do

{ cout<<”请输入您要删除的用户的姓名“;

cin>>na;

p=s.query(na);

if(p==0)

cout<<”没有该用户!“<

else

{(*p).disp();

k=p-s.getuser();

s.delete_record(p,k);

}

cout<<”是否继续?(Y or N)“<

cin>>w;

}

while(w=='Y');

break;} case 4: { system(”cls“);

cout<<”*********************************“<

cout<<”

查询记录

“<

cout<<”**********************************“<

char na[M];int p=1;

Fphone *t=NULL;

char w;

do

{ cout<<”请输入您要查询的用户的姓名“;

cin>>na;

t=s.query(na);

if(t)

{

cout<<”姓名:“<getname()<

cout<<”电话号码:“<getphone_num()<

}

else

cout<<”对不起,没有此人信息!“<

cout<<”是否继续?(Y or N)“<

cin>>w;}

} case 5: { while(w=='Y');break;system(”cls“);

cout<<”

请选择排序方式

“<

cout<<”

1.按姓名(升序)

“<

cout<<”

2.按电话号码(升序)

“<

cout<<”

3.按姓名(降序)

“<

cout<<”

4.按电话号码(降序)

“<

cout<<”

请输入你的选择:

“<

int k;

cin>>k;

switch(k)

{ case 1:

s.sorta_name();

cout<<”排序完成“<

system(”cls“);

break;

case 2:

s.sorta_phonenum();

cout<<”排序完成“<

system(”cls“);

break;

case 3:

s.sort_name();

cout<<”排序完成“<

system(”cls“);

break;

case 4:

s.sort_phonenum();

cout<<”排序完成“<

system(”cls“);

break;

} }

case 6: { system(”cls“);

cout<<”*****************************************“<

cout<<”

显示记录

“<

cout<<”*****************************************“<

s.disp();

system(”pause“);break;

}

} } case 7: { system(”cls“);

cout<<”您确定要删除所有记录吗?(Y or N)“<

char q;

cin>>q;

if(q=='Y'||q=='y')

{ cout<<”*********************************“<

cout<<”

全部删除记录

“<

cout<<”*********************************“<

s.clear();

}

else break;

system(”pause“);

break;} case 0: { system(”cls“);

cout<<”谢谢使用,再见!“<

exit(0);} default:

cout<<”不存在该选择,请重新输入要进行的操作:“<

system(”pause");

break;} 七.感想与心得

1.电话簿管理程序较长,算法比较复杂,调试的过程中遇到了各种各样的问题。各种各样的小错误寻找起来十分困难。在今后编写程序时应当随编随找错。

2.课设让我们把这一学期所学的C++知识得到了很好的应用,开拓了我们的思路,所谓温故而而知新,这次课设也让我们对以前的知识有了一个全面的回顾,加深了对已学知识的理解。

3.课设过程艰辛,花费时间很长,需要很强的耐力和信心。而这也是对我们的一次考验,养成了坚持不懈和吃苦耐劳的精神。总之,C++课设让我们学到了很多,也收获了很多,这必将成为我人生中的一个深刻的回忆。

第三篇:电话簿管理系统

#include #include #include #include #define HEADER1 “------------------------------telephone book--n” #define HEADER2 “|-------num-------|--------name--------|----phonenumber-----|---address------|n” #define HEADER3 “|-----------------|--------------------|--------------------|----------------|n” #define FORMAT “|%-10s

|%-10s

|%-15s

|%-16s|n” #define DATA

p->num

,p->name

,p->phonenum p->address #define END

“----------------n” #define N 100 int saveflag=0;

typedef int Status;typedef struct telebook{

char num[15];

char name[15];

char phonenum[15];

char address[20];}TELEBOOK;

void menu(){

system(“cls”);

textcolor(13);

gotoxy(10,5);

cprintf(“

The telephone-book Management System

n”);

gotoxy(10,8);

cprintf(“*****************************************************n”);

gotoxy(10,9);

cprintf(“* input record display record

* n”);

gotoxy(10,10);

cprintf(“* delete record

search record

* n”);

gotoxy(10,11);

cprintf(“* modify record

insert record

* n”);

gotoxy(10,12);

cprintf(“* sort record

save record

* n”);

gotoxy(10,13);

cprintf(“*

0 input record

* n”);

gotoxy(10,14);

cprintf(“*****************************************************n”);} ,void printheader(){

printf(HEADER1);

printf(HEADER2);

printf(HEADER3);}

void printdata(TELEBOOK pp){

TELEBOOK *p;

p = &pp;

printf(FORMAT,DATA);}

void Disp(TELEBOOK temp[],int n){

int i;

if(n==0)

{

printf(“n======>Not telephone record!n”);

getchar();

return;

}

printf(“nn”);

printheader();

i=0;

while(i

{

printdata(temp[i]);

i++;

printf(HEADER3);

}

getchar();}

void Wrong(){

printf(“nnnnn********Error:input has wrong!press any key to continue*******n”);

getchar();}

void Nofind(){

printf(“n========>Not find this telephone record!n”);}

Status Locate(TELEBOOK temp[],int n,char findmess[],char nameorphonenum[])

/*find the locate*/ {

int i=0;

if(strcmp(nameorphonenum,“phonenum”)==0)

{

while(i

{

if(strcmp(temp[i].phonenum,findmess)==0)return i;

i++;

}

}

else if(strcmp(nameorphonenum,“name”)==0)

{

while(i

{

if(strcmp(temp[i].name,findmess)==0)return i;

i++;

}

}

return-1;}

void stringinput(char *t,int lens,char *notice){

char n[255];

do{

printf(notice);

scanf(“%s”,n);

if(strlen(n)>lens)printf(“n exceed the required length!n”);

}while(strlen(n)>lens);

strcpy(t,n);}

Status Add(TELEBOOK temp[],int n)

/*increase record*/ {

char ch,num[10];

int i,flag=0;

system(“cls”);

Disp(temp,n);

while(1)

{

while(1)

{

stringinput(num,10,“input number(press '0' retrun menu):”);

flag = 0;

if(strcmp(num,“0”)==0)

{ return n;}

i=0;

while(i

{

if(strcmp(temp[i].num,num)==0)

{

flag = 1;

break;

}

i++;

}

if(flag==1)

{

getchar();

printf(“==>The number %s is existing,try again?(Y/N):”,num);

scanf(“%c”,&ch);

if(ch=='Y'&&ch=='y')continue;

else return n;

}

else break;

}

strcpy(temp[n].num,num);

stringinput(temp[n].name,15,“Name:”);

stringinput(temp[n].phonenum,15,“Telephone:”);

stringinput(temp[n].address,15,“Adress:”);

saveflag=1;

n++;

}

return n;}

void Qur(TELEBOOK temp[],int n)/*search the record*/ {

int select;

char searchinput[20];

int p = 0;

if(n<=0)

{

system(“cls”);

printf(“n====>No telephone record!n”);

getchar();

return;

}

system(“cls”);

printf(“n=====>1 Search by name =====>2 Search by telephonenumber!n”);

printf(“

Please choice(1,2):”);

scanf(“%d”,&select);

if(select==1)

{

stringinput(searchinput,10,“input the existing name:”);

p = Locate(temp,n,searchinput,“name”);

if(p!=-1)

{

printheader();

printdata(temp[p]);

printf(END);

printf(“press any key to return ”);

getchar();

}

else {

Nofind();

getchar();

}

}

else if(select==2)

{

stringinput(searchinput,15,“input the exiseing telephone number:”);

p = Locate(temp,n,searchinput,“phonenum”);

if(p!=-1)

{

printheader();printdata(temp[p]);

printf(END);

printf(“press any key to return ”);

getchar();

}

else { Nofind();getchar();}

}

else Wrong();getchar();}

Status Del(TELEBOOK temp[],int n){

int sel;

char findmess[20];

int p=0,i=0;

if(n<=0)

{

system(“cls”);

printf(“n======>No telephone!n”);

getchar();

return n;

}

system(“cls”);

Disp(temp,n);

printf(“ ===>1 Name ====>2 Telephone Please choice[1,2]:”);

scanf(“%d”,&sel);

if(sel==1)

{

stringinput(findmess,15,“input the existing name:”);

p = Locate(temp,n,findmess,“name”);

getchar();

if(p!=-1)

{

for(i=p+1;i

{

strcpy(temp[i-1].num,temp[i].num);

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

strcpy(temp[i-1].phonenum,temp[i].phonenum);

strcpy(temp[i-1].address,temp[i].address);

}

printf(“n==>delete successn”);

n--;

getchar();

saveflag=1;

}

else

Nofind();

getchar();

}

else if(sel==2)

{

stringinput(findmess,15,“input the existing telephone number:”);

p = Locate(temp,n,findmess,“phonenum”);

getchar();

if(p!=-1)

{

for(i=p+1;i

{

strcpy(temp[i-1].num,temp[i].num);

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

strcpy(temp[i-1].phonenum,temp[i].phonenum);

strcpy(temp[i-1].address,temp[i].address);

}

printf(“n======>delete success!n”);

n--;

getchar();

saveflag = 1;

}

else

Nofind();

getchar();

}

else

Nofind();

getchar();

return n;}

void Modify(TELEBOOK temp[],int n){

char findmess[20];

int p = 0;

if(n==0)

{

system(“cls”);

printf(“n=======>No telephone book recorderdn”);

getchar();

return;

}

system(“cls”);

printf(“modify telephone book recorder”);

Disp(temp,n);

stringinput(findmess,10,“input the existing name:”);

p = Locate(temp,n,findmess,“name”);

if(p!=-1)

{

printf(“Number : %sn”,temp[p].num);

printf(“Name : %sn”,temp[p].name);

stringinput(temp[p].name,15,“input new name:”);

printf(“Telephone:%s n”,temp[p].phonenum);

stringinput(temp[p].phonenum,15,“input new phonenum:”);

printf(“Address:%sn”,temp[p].address);

stringinput(temp[p].address,30,“input new address:”);

printf(“n==========>modify success!n”);

getchar();

saveflag = 1;

}

else {

Nofind();

getchar();

}

return;}

Status Insert(TELEBOOK temp[],int n){

char ch,num[10],snum[10];

TELEBOOK newinfo;

int flag = 0,i =0,kkk = 0;

system(“cls”);

Disp(temp,n);

while(1)

{

stringinput(snum,10,“Please input insert location after the Number:”);

flag = 0;i = 0;

while(i

{

if(strcmp(temp[i].num,snum)==0){kkk = i;flag = 1;break;}

i++;

}

if(flag==1)break;

else {

getchar();

printf(“n=====>The number %s is not existing,try again?(Y/N)”,snum);

scanf(“%c”,&ch);

if(ch=='Y'||ch=='y')continue;

else return n;

}

}

while(1)

{

stringinput(num,10,“input the new Number:”);

i = 0;flag = 0;

while(i

{

if(strcmp(temp[i].num,num)==0){flag = 1;break;}

i++;

}

if(flag==1){

getchar();

printf(“n=======>Sorry,The number %s is existing,try again(Y/N)”,num);

scanf(“%c”,&ch);

if(ch=='y'||ch=='Y')continue;

else return n;

}

else break;

}

strcpy(newinfo.num,num);

stringinput(newinfo.name,15,“Name:”);

stringinput(newinfo.phonenum,15,“Telephone:”);

stringinput(newinfo.address,15,“Address:”);

saveflag = 1;

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

{

strcpy(temp[i+1].num,temp[i].num);

strcpy(temp[i+1].name,temp[i].name);

strcpy(temp[i+1].phonenum,temp[i].phonenum);

strcpy(temp[i+1].address,temp[i].address);

}

strcpy(temp[kkk+1].num,newinfo.num);

strcpy(temp[kkk+1].name,newinfo.name);

strcpy(temp[kkk+1].phonenum,newinfo.phonenum);

strcpy(temp[kkk+1].address,newinfo.address);

n++;

Disp(temp,n);

printf(“nn”);

getchar();

return n;}

void SelectSort(TELEBOOK temp[],int n){

int i=0,j=0,indexmin;

char charflag[10];

TELEBOOK newinfo;

if(n<=0)

{

system(“cls”);

printf(“====>Not telephone record!n”);

getchar();

return;

}

system(“cls”);

Disp(temp,n);

printf(“The order is sorted by number:n”);

for(i=0;i

{

indexmin = i;

for(j=i+1;j

if(strcmp(temp[i].num,temp[j].num>0))

indexmin = j;

if(indexmin!=i)

{

strcpy(newinfo.num,temp[i].num);

strcpy(newinfo.name,temp[i].name);

strcpy(newinfo.phonenum,temp[i].phonenum);

strcpy(newinfo.address,temp[i].address);

strcpy(temp[indexmin].num,newinfo.num);

strcpy(temp[indexmin].name,newinfo.name);

strcpy(temp[indexmin].phonenum,newinfo.phonenum);

strcpy(temp[indexmin].address,newinfo.address);

}

}

Disp(temp,n);

saveflag = 1;

printf(“n=======>sort complete!n”);

getchar();

return;}

void Save(TELEBOOK temp[],int n){

FILE *fp;

int i = 0;

fp = fopen(“c: elephonebook”,“w”);

if(fp==NULL)

{

printf(“n=====>open file error!n”);

getchar();

return;

}

for(i=0;i

{

if(fwrite(&temp[i],sizeof(TELEBOOK),1,fp)==1)

continue;

else break;

}

if(i>0)

{

getchar();printf(“nn=====>save file comlete,toal save's record is save's record number is:%dn”,i);

getchar();

saveflag = 0;

}

else {

system(“cls”);

printf(“the current link is empty , no telephone record is saved!n”);

getchar();

fclose(fp);

} }

void main(){

TELEBOOK tele[N];

FILE *fp;

int select;

char ch;

int count=0;

fp = fopen(“C: elephonebook”,“a+”);

if(fp==NULL)

{

printf(“n========>can not open file!n”);

exit(0);

}

while(!feof(fp))

{

if(fread(&tele[count],sizeof(TELEBOOK),1,fp)==1)

count++;

}

fclose(fp);

printf(“n==>open file sucess, the total records number is :%d.n”,count);

getchar();

menu();

while(1)

{

system(“cls”);

menu();

printf(“n

Please Enter you choice(0-9):”);

scanf(“%d”,&select);

if(select==0)

{

if(saveflag==1)

{

getchar();

printf(“n==>Wether save the modified record to file?(Y/N):”);

scanf(“%c”,&ch);

if(ch=='Y'||ch=='y')

Save(tele,count);

}

printf(“n===>thank you for useness!”);

getchar();

break;

}

switch(select)

{

case 1:count=Add(tele,count);break;

case 2:system(“cls”);Disp(tele,count);break;

case 3:count = Del(tele,count);break;

case 4:Qur(tele,count);break;

case 5:Modify(tele,count);break;

case 6:count = Insert(tele,count);break;

case 7:SelectSort(tele,count);break;

case 8:Save(tele,count);break;

default :Wrong();getchar();break;

}

}

getch();}

第四篇:学生成绩管理系统C++程序设计

项目设计题目(学生成绩管理系统)

学号:

姓名:

自评成绩:

成绩:

1.选题意义、依据

学生成绩系统的设计从学生的应用中而来,学生了解该系统的组成和运行过程,它贴近学生的生活能使学生更加方便的使用各个语句、函数、结构体等。

依据学生期末成绩表的格式。

2.系统功能设计与分析(功能模块说明)

系统主要用于从一个文件夹读入学生信息(101 张三

78 87 102 李斯

103 王红

79 87 104 赵子龙 72 75 76

李洪磊 88 98 89),包括学生学号、姓名、成绩(数学、英语、数据库),程序中引用了八个函数 void Cscore(int);void Rank(int ave);void Listnumber(int i);

void Listscore(int i);void Lookup(int);void Alter(int);void Dele(int &i);void Insert(int &i);系统主要实现的功能有:查询、修改、删除、插入、成绩单(以学号排名)和成绩单(以名次排名)。

Cscore 函数主要是对学生进行排名。具有相同总分的学生具有相同的名次,例如:第三名和第四名具有相同的总分则在表中不会出现第四名,将出现两个第三名紧接着出现第五名学生的情况。

Rank 函数主要用于按平均分对学生进行备注。把学生分为四个等级:>90分为excellent,80—90分为medium,60—80分为qualified,<60分为disqualified。Listnumber 函数主要用于把学生的信息(学号 姓名 数学 英语 数据库 总分平均分 名次 备注)以学号排名的顺序用表的形式输出,方便学生查看。Listnumber 函数中还调用了Cscore 和Rank 函数。

Listscore 函数是把学生的信息以总成绩排名的形式输出。

Lookup 函数主要运用学号或姓名形式查询单个学生信息,如果存在则输出该学生信息(学号 姓名 数学 英语 数据库 总分平均分 名次 备注),否则输出“Input message is error.”。

Alter 函数是修改指定学号的学生信息。主要用于修改指定学号学生的各科成绩并输出修改后的学生信息(学号 姓名 数学 英语 数据库 总分平均分 名次 备注)。

Delete 函数用于删除指定学生的信息。可用两种方式删除:以学号形式删除学生信息,以姓名形式删除学生信息。若要删除了学生不存在则输出“message error.”。

Insert 函数用来插入学生的信息,一次调用Insert 函数可以添加多个学生的信息。Insert 函数中还调用了Cscore 和Rank 函数。

3.涉及的主要知识点说明

(1)系统主要运用了函数的声明、定义、调用(值调用和地址调用)。

(2)对文件的读入操作。

(3)在平均分的求取上采用四舍五入的方式,运用了类型转换。(4)多次运用if和for嵌套,在for嵌套中又运用了break语句。(5)运用了switch。

(6)对字符数组的比较中运用了strcmp,还运用toupper把小写字母转换成大写。

(7)对学生信息进行的插入和有序删除操作。(8)运用iomanip对输出进行美观。

4.创新性说明(怎么解决)

创新性:系统可以对具有相同总分学生的学生输出相同的名次。若存在三个相同的分数都为第二名,则在输出时出现三个第二名不会出现第三、四名,紧接着出现第五名。

解决方法:(1)用一个数组记录具有相同分数的人数,数组下标和学生信息所具有的下标相同;(2)删除相同的总分只保留其中一个分数;(3)对删除相同总分的分数按从高到底进行排序;(4)对各个学生的总分进行排名。

5.源代码

//****************************************************************** //Student achievement program //This program has eight functions of students grade,including list //score ranking,lookup,alter,delete,insert and rank.From the file read in //student achievement.Scores of people have the same same place.//****************************************************************** #include #include #include #include #include #include

void Cscore(int);void Rank(int ave);void Listnumber(int i);void Listscore(int i);void Lookup(int);void Alter(int);void Dele(int &i);void Insert(int &i);

using namespace std;const int MAX=100;

struct student

//定义学生信息结构体 { int num;char name[8];int math;int english;int database;int sum;int average;int score;}stu[MAX];

int main()

//主函数 {

int i,k;char ch;string filename;ifstream infile;

cout<<“Please input the filenames: ”;cin>>filename;infile.open(filename.c_str());if(!infile){

cout<<“Can't open the input file.”<

return 1;} for(i=0;i

infile>>stu[i].num>>stu[i].name>>stu[i].math>>stu[i].english>>stu[i].database;

stu[i].sum=stu[i].math+stu[i].english+stu[i].database;

stu[i].average=int(float(stu[i].sum)/3+0.5);} i=i-1;cout<

学生成绩管理系统

”<

cout<<“Y or N 进入菜单栏 ”<>ch;ch=toupper(ch);while(ch=='Y'){ cout<

<<“

菜单:”<

<<“

1)查 询”<

<<“

2)修 改”<

<<“

3)删 除”<

<<“

4)插 入”<

<<“

5)成绩单(以学号排名)”<

6)成绩单(以名次排名)”<

cout<<“***请选择 1--4 中任何一个:”<

cin>>k;

cout<

switch(k){

case 1:Lookup(i);break;

case 2:Alter(i);break;

case 3:Dele(i);break;

case 4:Insert(i);break;

case 5:Listnumber(i);break;

case 6:Listscore(i);break;

default :cout<<“error input!”<

cout<

cin>>ch;

ch=toupper(ch);} cout<<“Thank you for using!”<

<<“Bye bye!”<

void Cscore(int i)

//对学生分数进行排名 { int h[MAX],b[MAX],score[MAX+1],n,k,j;int sum0[MAX],s;n=i;for(j=0;j

sum0[j]=stu[j].sum;} for(j=0;j

h[j]=0;for(k=0;k

h[j]++;

//具有同一分数的人数

} } //end for } //end for for(j=0;j

//删除多个同一分数只保留其中一个分数 { for(k=j+1;k

if(sum0[j]==sum0[k])

{

sum0[k]=sum0[i-1];

i--;

k--;

} } } //end for for(j=0;j

//按从高到底的顺序对总分进行排名 { for(k=j+1;k

if(sum0[j]

{

s=sum0[j];

sum0[j]=sum0[k];

sum0[k]=s;

} //end if } //end for } //end for b[0]=0;score[0]=1;for(j=0;j

//对学生成绩进行排名 { for(k=0;k

if(sum0[j]==stu[k].sum)

{

score[j+1]=score[j]+b[j];

stu[k].score=score[j+1];

b[j+1]=h[k];

} //end if

} //end for } //end for }

void Rank(int ave)

//对学生等级输出 { if(ave>=90)

{

cout<<“excellent”;

}

else if(ave>=80)

{

cout<<“medium”;

}

else if(ave>=60)

{

cout<<“qualified”;

}

else

{

cout<<“disqualified”;

}

cout<

void Listnumber(int i){ int j;Cscore(i);cout<<“学号

姓名

数学

英语

数据库

总分

平均分

名次

备注

”<

cout<

<

cout<

cout<

cout<

Rank(stu[j].average);} }

void Listscore(int i){ int j,k;Cscore(i);cout<<“学号

姓名

数学

英语

数据库

总分

平均分

名次

备注

”<

for(k=0;k

{

if(stu[k].score==j)

{

cout<

<

cout<

cout<

cout<

Rank(stu[k].average);

}

} } }

void Lookup(int i)

//运用学号或姓名形式查询单个学生信息 { int j,k,n,numb;char name1[8];

cout<<“Please select you check score ways.”<>n;if(n)

//以学号形式查询学生信息

{

cout<<“Please input student number: ”;

cin>>numb;

for(j=0;j

{

if(numb==stu[j].num)

{

k=j;

break;

}

} } else

//以姓名形式查询学生信息

{

cout<<“Please input student name: ”;

cin>>name1;

for(j=0;j

if(strcmp(stu[j].name,name1)==0)

{

k=j;

break;

} } if(k==MAX){

cout<<“Input message is error.”<

//如果学生存在则输出学生信息

{

Cscore(i);

cout<<“学号

姓名

数学

英语

数据库

总分

平均分

名次

备注

”<

cout<

<

cout<

cout<

cout<

Rank(stu[j].average);} }

void Alter(int i)//修改指定学号的学生信息 { int numb,j;

cout<<“alter begin...”<

cout<<“Please input number:”;

cin>>numb;for(j=0;j

if(numb==stu[j].num)

{

cout<<“find out:”<

cout<<“学号:”<

cout<<“Please input new result: 数学

英语

数据库 ”<

cin>>stu[j].math>>stu[j].english>>stu[j].database;

stu[j].sum=stu[j].math+stu[j].english+stu[j].database;

stu[j].average=int(float(stu[j].sum)/3.0+0.5);

Cscore(i);

//输出修改后该学号学生的信息

cout<<“学号

姓名

数学

英语

数据库

总分

平均分

名次

备注

”<

cout<

<

cout<

cout<

cout<

Rank(stu[j].average);

break;

} } }

void Dele(int &i)

//删除指定学生的信息 { int numb,j,k;char name0[8];cout<<“delete begin...”<

cout<<“

[1]以学号形式删除学生信息”<

[0]以姓名形式删除学生信息”<>k;if(k)

//以学号形式删除学生的信息

{

cout<<“Please input delete number:”;

cin>>numb;

for(j=0;j

{

if(numb==stu[j].num)

break;

} } else

//以姓名形式删除学生的信息

{

cout<<“Please input delete name:”;

cin>>name0;

for(j=0;j

{

if(strcmp(name0,stu[j].name)==0)

break;

}

}

void Insert(int &i)

//插入学生的信息 { int j,n;cout<<“insert begin...”<>n;i=i+n;cout<<“Please input insert message.form:”<

cin>>stu[j].num>>stu[j].name>>stu[j].math>>stu[j].english>>stu[j].database;

stu[j].sum=stu[j].math+stu[j].english+stu[j].database;

stu[j].average=int(float(stu[j].sum)/3.0+0.5);} Cscore(i);cout<<“学号

姓名

数学

英语

数据库

总分

平均分

名次

备注

”<

cout<

<

cout<

cout<

stu[j].num=stu[j+1].num;

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

stu[j].math=stu[j+1].math;

stu[j].english=stu[j+1].english;

stu[j].database=stu[j+1].database;

stu[j].sum=stu[j+1].sum;

stu[j].average=stu[j+1].average;} i=i-1;Cscore(i);} else cout<<“message error.”<

cout<

运行结果:

分析:

系统基本上能实现对成绩的查询、、修改、删除、插入、成绩单(以学号排名)和成绩单(以名次排名)等功能,并且可以插入多个学生的信息。但在插入学生后未不能成绩单以学号排名的形式输出。为了改进程序对Insert 函数进行了一下修改。

Insert 函数代码如下:

void Insert(int &i)

//插入学生的信息 {

int j,k,n,m,first,last,mid;int num0,math0,english0,database0;char name0[8];cout<<“insert begin...”<>n;m=i+n;first=0;last=i-1;mid=(first+last)/2;cout<<“Please input insert message.form:”<>stu[j].num>>stu[j].name>>stu[j].math>>stu[j].english>>stu[j].database;while(first<=last){

if(stu[j].num

{

last=mid-1;

}

else if(stu[j].num>stu[mid].num)

{

first=mid+1;

}

else

{

break;

}

mid=(first+last)/2;} if(first>last){

num0=stu[j].num;

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

math0=stu[j].math;

english0=stu[j].english;

database0=stu[j].database;

for(k=i-1;k>first;k--)

//进行有序插入

{

stu[k].num=stu[k-1].num;

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

stu[k].math=stu[k-1].math;

}

stu[k].english=stu[k-1].english;

stu[k].database=stu[k-1].database;

stu[k].sum=stu[k-1].sum;

stu[k].average=stu[k-1].average;

}

stu[first].num=num0;

strcpy(stu[first].name,name0);

stu[first].math=math0;

stu[first].english=english0;

stu[first].database=database0;

stu[first].sum=stu[first].math+stu[first].english+stu[first].database;

stu[first].average=int(float(stu[first].sum)/3.0+0.5);} else {

cout<<“message error.”<

last=i-1;

mid=(first+last)/2;} Cscore(i);

修改后程序经运行后结果如下:

结果发现修改后的程序运用了二分查找法、多重嵌套等,能较好的实现对学生的信息以学号为序进行了多个数据的有序插入。

第五篇:c语言 电话簿管理系统

#include “stdio.h” #include “string.h” #define N 20 struct mem { char name[20];

char tel[20];

char wu[20];

char dz[20];}mem[N];void sorttel(struct mem tel[]){

struct mem temp;

int i,j;

FILE *fp;if((fp=fopen(“c: elephone.txt”,“rb”))==NULL){

printf(“不能打开文件n”);} for(i=0;i

for(j=0;j

if(strcmp(mem[j+1].tel,mem[j].tel)<0)

{

temp=mem[j];

mem[j]=mem[j+1];

mem[j+1]=temp;

} for(i=0;i

void sortname(struct mem tel[]){

struct mem temp;

int i,j;

FILE *fp;if((fp=fopen(“c: elephone.txt”,“rb”))==NULL){

printf(“不能打开文件n”);} for(i=0;i

for(j=i+1;j

if(strcmp(mem[j].name,mem[i].name)<0)

{

temp=mem[i];

mem[i]=mem[j];

mem[j]=temp;

} for(i=0;i

void sor(){int k;

do{printf(“--------------------排序菜单-------------------n”);

printf(“------------------------n”);

printf(“

1:按号码排序n”);

printf(“

2:按姓名排序n”);

printf(“

0:退出n”);

printf(“------------------------n”);

printf(“请输入0-2选择功能n”);

scanf(“%d”,&k);getchar();

switch(k)

{

case 1:sorttel(mem);break;

case 2:sortname(mem);break;

case 0:return;

}

}while(1);}

void add(){ char name[10];char tel[10];

char wu[10];

char dz[10];FILE *fp;if((fp=fopen(“c: elephone.txt”,“a”))==NULL){

printf(“不能打开文件n”);

exit(0);}

printf(“请输入姓名”);

gets(name);

printf(“请输入电话号码”);

gets(tel);

printf(“请输入工作单位”);

gets(wu);

printf(“请输入地址”);

gets(dz);printf(“n”);

fprintf(fp,“%s %s %s %sn”,name,tel,wu,dz);

fclose(fp);} void del(){

FILE *fp;

int i=0,n;

char name[10];

printf(“请输入删除名字”);

gets(name);

if((fp=fopen(“c: elephone.txt”,“r”))==NULL){

printf(“不能打开文件n”);

exit(0);}

while(!feof(fp))

{

fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);

if(strcmp(name,mem[i].name)!=0)i++;

}

fclose(fp);if((fp=fopen(“c: elephone.txt”,“w”))==NULL){

printf(“不能打开文件n”);

exit(0);} for(n=0;n

fprintf(fp,“%s %s %s %s”,mem[n].name,mem[n].tel,mem[n].wu,mem[n].dz);fclose(fp);} void dis(){ FILE * fp;int i=0,n;printf(“

姓名

电话号码

工作单位

地址n”);

if((fp=fopen(“c: elephone.txt”,“r”))==NULL){

printf(“不能打开文件n”);

exit(0);}

while(!feof(fp))

{fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);i++;}

fclose(fp);

n=i;

for(i=0;i

printf(“%-8s%11s%13s%24sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);} void mod(){ FILE * fp;int i=0,n;char name[10];char nn[10];char nt[10];char nwu[10];char ndz[10];

printf(“请输入要修改的姓名”);gets(name);printf(“请输入修改后的姓名”);gets(nn);printf(“请输入修改后的电话号码”);gets(nt);printf(“请输入修改后的工作单位”);gets(nwu);printf(“请输入修改后的地址”);gets(ndz);printf(“n”);if((fp=fopen(“c: elephone.txt”,“r”))==NULL){

printf(“不能打开文件n”);

exit(0);}

while(!feof(fp))

{

fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);

if(strcmp(name,mem[i].name)==0)

{strcpy(mem[i].name,nn);strcpy(mem[i].tel,nt);strcpy(mem[i].wu,nwu);strcpy(mem[i].dz,ndz);}

i++;

}

fclose(fp);if((fp=fopen(“c: elephone.txt”,“w”))==NULL){

printf(“不能打开文件n”);

exit(0);}

n=i;

for(i=0;i

fprintf(fp,“%s %s %s %sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);

fclose(fp);} void main(){

int choose;

while(1)

{

printf(“--------------------电话簿管理系统--------------------n”);

printf(“------------------------n”);

printf(“

1:添加一个新号码n”);

printf(“

2:删除一个号码n”);

printf(“

3:显示所有保存的号码n”);

printf(“

4:修改号码n”);

printf(“

5:排序n”);

printf(“

6:查询n”);

printf(“

0:退出n”);

printf(“------------------------n”);

printf(“请输入0-6选择功能n”);

scanf(“%d”,&choose);getchar();

if(choose!=0)

switch(choose)

{

case 1:add();break;

case 2:del();break;

case 3:dis();break;

case 4:mod();break;

case 5:sor();break;

case 6:/*que();break*/;

}

else exit(0);

} }

下载C++程序设计—电话簿管理系统word格式文档
下载C++程序设计—电话簿管理系统.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    C++程序设计总结

    第一章面向对象编程原理 近五十年间,软件技术经历了多个阶段的发展演变  目前为止最流行的技术还是面向过程编程(POP)  面向过程编程采用了自顶向下的设计方案,问题被看做多个......

    C++通讯录管理系统

    黑龙江工程学院 第一章 问题分析和任务定义 1.1 问题分析 问题: 编写一个通讯录管理系统。要求包括通讯录建立、增加号码、删除号码、查询号码(按姓名、按号码)、修改号码、......

    C++程序设计实习报告

    目录 一、实习内容…………………………………………………………………………1 二、设计思路…………………………………………………………………………2 三、程序清单…......

    《C++程序设计》实验报告范例

    注意:以下蓝色文字部分根据情况增删实验1熟悉VC++6.0集成开发环境 一、实验时间: 2011年9月20日 二、实验地点: 第7机房 三、指导教师: 邓谱 四、实验目的: 1. 了解VC++6.0的主要......

    c++程序设计教案(朱红)

    1构造一个类,含有3个数据成员,为长方体的长、宽、高,含有一个成员函数,用来计算长方体的体积 #include "stdafx.h" #include class cub { private: double a,b,c; public: voi......

    C++程序设计课程设计人口户籍信息管理系统源程序

    九、源程序代码 #include #include #include #include//kj;lj;j;j; class population { private: int maxnum;//人口户籍编号最大值r int sno;//编号 char name[20]; char......

    C++课程设计(简单图书管理系统)

    课 程 设 计 课程名称C++课程设计 题目名称图书管理系统 2016 年6 月 29 日目录 一.设计内容与要求 .......................................................................

    C++课程设计(教务管理系统)

    #include using namespace std; #include #include #include #include #include #include"01.h" class University; void menu(University uni);//菜单函数声明class Stude......