文档库 最新最全的文档下载
当前位置:文档库 › 数据结构课程设计(学生信息管理系统)

数据结构课程设计(学生信息管理系统)

1需求分析

1.1 设计任务要求

通讯录系统主要包含以下要求:

(1)设计一个学生通讯录管理系统,每个学生数据信息包括:姓名、电话号码、qq、邮编和地址;

(2)创建学生数据类型为结构体并以磁盘文件保存;

(3)能读取磁盘文件并显示输出学生的相关信息;

(4)能按姓名或电话等多种方式进行学生信息查询;

(5)能查询、添加、修改和删除学生通讯录。

1.2 系统功能需求分析

系统主要包含以下主要功能:

(1)查询通讯录记录;

(2)添加通讯录记录;

(3)修改通讯录记录;

(4)删除通讯录记录;

(5)关闭通讯录。

2 概要设计

2.1 数据类型

本系统中所有变量都定义为字符串型,学生通讯录数据类型定义为结构体类型。然而为了更加方便,添加了抽象数据类型类book ,再私有继承了以结构体存储的学生数据。

2.2 主程序及各程序层次关系

以下是系统功能模块关系图,主要包含查询、添加、修改、删除联系人和关闭系统等功能。另外还提供了键盘式选择菜单实现功能选择。

图2.1 系统功能模块关系图

查询联系人:可以选择用姓名和电话两种方式查询

添加联系人:可以添加通讯录记录,依次输入姓名、电话、qq 、邮编和地址 修改联系人:输入欲修改联系人姓名后,再依次输入修改姓名、电话、qq 、邮编和地址即可完成修改

删除联系人:输入欲删除联系人的姓名后,会自动删除该联系人的记录内容 关闭系统:选择相关操作进行系统正常关闭,保存有效数据记录

3 详细设计

3.1 实现数据类型

(1)以字符串类型定义通讯录中学生数据信息变量:

string name;//姓名string number;//电话号码

string qq;//QQ号string post;//邮编

string address;//地址

(2)学生通讯录数据类型定义为结构体存储:

struct inf{

string name;//姓名

string address;//地址

string number;//电话号码

string post;//邮编

string qq;//QQ号

}datatype;

(3)实现类book私有继承结构体inf:

class book:private inf

{public:

book(){};//默认构造函数

int face();//首页

void add_person();//添加联系人

void del_person();//删除联系人

void fix();//修改信息

void find();//查询联系人

void save_new();//保存新增加的联系人};

3.2 实现各操作模块的功能

(1)主函数的实现:

int main()

{ int choose; book b;

while (choose = b.face())

{ switch (choose)

{case 1:

b.find();////查询联系人

break;

case 2:

b.add_person();////添加联系人

break;

case 3:

b.fix();////修改信息

break;

case 4:

b.del_person();////删除联系人

break;

case 5:

cout <

exit(0);//退出系统

break;

default: break;

}

}

return 0;

}

(2)各操作模块函数的实现:

void book::add_person()//添加联系人

{ cout <

cout<<"姓名:" ;cin >>name;

cout <<"电话: ";cin >>number;

cout <<"QQ : ";cin >>qq;

cout <<"邮编: ";cin >>post;

cout <<"地址: ";cin >>address; save_new();

cout <

system("pause");//出现中文的显示:按任意键继续。。。

}

void book::del_person()//删除联系人

{ ofstream outData("temp.txt", ios::out);

ifstream inData("pbook.txt", ios::in);

if (!outData || !inData)

{ cout <

system("pause"); return;

}

string s;

cout <>s;

string str; bool flag = true;

while (inData >>name >>number)

{ getline(inData, str);

if ((s==name) || (s==number))

{ cout <

<<" " << setw(16) << "电话号码" <<" "

<< setw(18) << "QQ" <<" "<< setw(14) << "邮编" <<" "

<< setw(20) << "地址"<

cout <

<<" " <

flag = false; break;

}

outData <

<<" " <

}

if (flag)

{ cout <

else//将temp.txt的数据复制到pbook.txt,直接覆盖要删除的信息,达到删除效果

{ while (getline(inData, str))

{ outData <

}

outData.close(); inData.close();

ofstream out("pbook.txt", ios::out);

ifstream in("temp.txt", ios::in);

if (!out || !in)

{ cout <

system("pause");return;

}

while (getline(in, str))

{ out <

out.close(); in.close();

cout <

}

system("pause");

}

void book::fix()//修改信息

{ ofstream outData("temp.txt", ios::out);

ifstream inData("pbook.txt", ios::in); //

if (!outData || !inData)

{ cout <

system("pause"); return;

}

string s;

cout <>s;

bool flag = true; string str;

while (inData >>name >>number)

{ getline(inData, str);

if ((s==name) || (s==number))

{

cout <

cout<< setiosflags(ios::left) << setw(17) << "姓名"

<<" " << setw(16) << "电话号码" <<" "<< setw(18) << "QQ" <<" "

<< setw(14) << "邮编" <<" "<< setw(20) << "地址"<

cout <

<<" " <

cout <

cout <<"姓名:" ;cin >>name;

cout <<"电话号:";cin >>number;

cout <<"QQ :";cin >>qq;

cout <<"邮编:";cin >>post;

cout <<"地址:";cin >>address; save_new();

flag = false; break;

}

outData <

<<" " <

}

if (flag)

{ cout <

}

else

{ while (getline(inData, str))

{ outData <

}

outData.close();inData.close();

ofstream out("pbook.txt", ios::out);

ifstream in("temp.txt", ios::in);

if (!out || !in)

{ cout <

system("pause");return;

}

while (getline(in, str))

{ out <

out.close();// in.close();

cout <

}

system("pause");

}

void book::find()//查询联系人

{ ifstream inData("pbook.txt",ios::in);

if (!inData)

{ cout <

system("pause"); return;

}

string s;

cout <>s;

bool flag = true; string str;

while (inData >>name >>number)

{ getline(inData, str);

if ((name==s) || (number==s))

{

cout <

cout<< setiosflags(ios::left) << setw(17) << "姓名"<<" " << setw(16) << "电话号码" <<" "<< setw(18) << "QQ" <<" "<< setw(14) << "邮编" <<" "<< setw(20) << "地址"<

cout <

<<" "<

flag = false; break;

}

}

if(flag)

{cout<

system("pause");

}

void book::save_new()

{ofstream f("pbook.txt", ios::app);

if (!f)

{ cout <

system("pause");return;

}

f<< setiosflags(ios::left) << setw(17) << name<<" " << setw(16) << number <<" "<< setw(18) << qq <<" "<< setw(14) << post <<" "<< setw(20) << address <

f.close();

}

4调试分析

1.在程序的调试过程中遇上了文件存储数据的正确读取错误,但经过不断查问和查阅相关书籍后,根据调试提示错误,解决了所有错误。通过文件存储学生数据信息,使得读取信息操作更加方便、省事;

2.在执行操作时,是根据文件搜索算法,去获取学生数据信息。使得在时间和空间上读取数据都要更加快捷、省事。其时间复杂度为O(2n);

3.经过这一次的系统设计,使我认识到了实践的重要性,只有实践多了才能把知识学得好,学得牢。同时让我对数据结构得到了进一步的学习,以及对C++语言的学习得以提高,最后也大部分掌握了文件存储数据的相关操作。

5 用户使用手册

1.本程序的运行环境为WINDOWS操作系统,运行软件为Microsoft Visual C++;

2.运行程序后即输出提示信息,由于在定义变量时已将需要输入的定义为string型变量,所以输入时需根据提示信息按要求输入;

3.运行程序后屏幕上会出现通讯录主菜单,然后根据需要选择1-5序号的操作,输入选定序号后,按Enter键,程序就会执行相关操作。比如输入序号1,再按Enter键,程序就会运行查询联系人的代码操作,然后再根据提示进行查询工作即可;

4.当以上操作完成后,程序将输出“按任意键继续...”此时,查询联系人工作的程序运行完毕。

6 测试数据和数据结果

(1)输入操作序号:2

依次输入:wen 151******** 997191620 123456 湖南长沙

输出结果如下所示:

(2)输入操作序号:1

输入姓名:wen;(或电话号码:151********)

输出结果如下所示:

(3)输入操作序号:3

输入姓名:wen

重新依次输入要修改信息:wen 151******** 997191620 654321 海南万宁

输出结果如下所示:

(4)输入操作序号:4 输入姓名:wen

输出结果如下所示:

(5)输入操作序号:5 输出结果如下所示:

参考文献

[1] 严蔚敏,吴伟民. 数据结构(C语言版). 北京:清华大学出版社,1997.04

[2] 张晓莉,罗文劼,刘振鹏等。数据结构与算法。北京:机械工业出版社,2002.10

[3] 王宏生,宋继红。数据结构。北京:国防工业出版社,2006.01

[4] 孙淑霞,肖阳春,魏琴等.C/C++程序设计教程(第2版)。北京:电子工业出版社,2007.03

[5] 谭浩强。C++程序设计。北京:清华大学出版社,2004,06

附录源程序清单

#include

#include

#include

#include

#include

using namespace std;

struct inf{

string name;//姓名

string address;//地址

string number;//电话号码

string post;//邮编

string qq;//QQ号

}datatype;

class book:private inf

{

public:

book(){};//默认构造函数

int face();//首页

void add_person();//添加联系人

void del_person();//删除联系人

void fix();//修改信息

void find();//查询联系人

void save_new();//保存新增加的联系人

};

//首页

int book::face()

system("cls");//清楚屏幕

cout <

cout<<" *****************************************" <

<<" # #" <

<<" # 通迅录#" <

<<" # #" <

<<" # 1. 查询联系人. #" <

<<" # #" <

<<" # 2. 添加新联系人. #" <

<<" # #" <

<<" # 3. 修改联系人. #" <

<<" # #" <

<<" # 4. 删除联系人. #" <

<<" # #" <

<<" # 5. 关闭系统. #" <

<<" # #" <

<<" *****************************************" <

<<" 请选择您要操作的序号(1-5):" ;

int choose;

cin >>choose;

return choose;

}

//添加联系人

void book::add_person()

{

cout <

<<"姓名:" ;

cin >>name;

cout <<"电话: ";

cin >>number;

cout <<"QQ : ";

cin >>qq;

cout <<"邮编: ";

cin >>post;

cout <<"地址: ";

cin >>address;

save_new();

cout <

system("pause");//出现中文的显示:按任意键继续。。。

}

//删除联系人

void book::del_person()

{

ofstream outData("temp.txt", ios::out);

ifstream inData("pbook.txt", ios::in);

if (!outData || !inData)

{

cout <

system("pause");

return;

}

string s;

cout <

cin >>s;

string str;

bool flag = true;

while (inData >>name >>number)

{

getline(inData, str);

if ((s==name) || (s==number))

{

cout <

<<" " << setw(16) << "电话号码" <<" "

<< setw(18) << "QQ" <<" "

<< setw(14) << "邮编" <<" "

<< setw(20) << "地址"<

cout <

<<" " <

flag = false;

break;

outData <

<<" " <

}

if (flag)

{

cout <

}

else//将temp.txt的数据复制到pbook.txt,直接覆盖要删除的信息,达到删除效果

{

while (getline(inData, str))

{

outData <

}

outData.close();

inData.close();

ofstream out("pbook.txt", ios::out);

ifstream in("temp.txt", ios::in);

if (!out || !in)

{

cout <

system("pause");

return;

}

while (getline(in, str))

{

out <

out.close();//

in.close();

cout <

}

system("pause");

}

//修改信息

void book::fix()

{

ofstream outData("temp.txt", ios::out);

ifstream inData("pbook.txt", ios::in); //

if (!outData || !inData)

{

cout <

system("pause");

return;

}

string s;

cout <

cin >>s;

bool flag = true;

string str;

while (inData >>name >>number)

{

getline(inData, str);

if ((s==name) || (s==number))

{

cout <

相关文档
相关文档 最新文档