校友录管理系统

一、 大型实验的内容

校友录管理系统(ARMS:Alumnus Record Management System)用于个人用户进行校友信息的管理,要求完成的主要的功能有录入、修改、删除、查询、排序校友信息。可以完成密码登录系统、按不同名录查找信息、按姓名或届级排序等工作。要求使用学习过的 C/C++ 程序设计的知识完成校友录管理系统的设计与实现。

二、 运行环境

校友录管理系统(ARMS)在 Dev-C++ 平台下开发,操作系统:Windows 10。

硬件环境:

处理器:Intel® Core™ i5-7200U CPU @ 2.50GHz 2.70GHz

内存:8.00GB

系统类型:64 位操作系统,基于 x64 的处理器

三、 实验课题分析

3.1 校友录管理系统的主要功能

校友录管理系统(ARMS)主要功能为:主要功能包括录入、修改、删除、查询、排序校友信息。可以完成密码登录系统、按不同名录查找信息、按姓名或届级排序等工作。细的系统功能结构为图 1 所示。

图 1 系统结构图

系统各模块的功能具体描述为:

1、登录模块

首先会展现欢迎界面,随后用户输入登录密码,初次登录时密码为 123456。用户总共有 5 次输入密码的机会,若用户连续输错 5 次密码,程序会自动关闭。登录成功后,进入菜单模块,用户可以进行包括修改登录密码在内的若干操作。程序会在用户登录前从文件读入所有的信息,包括校友信息和用户设置的密码。

退出登录的时候则要保存当前系统的所有状态,包括校友信息和用户设置的密码。

2、校友录模块

首先创建校友类来储存校友信息,并建立链表串联不同校友的信息,并在此基础上实现程序对校友信息的 6 种不同操作。

校友信息包括:姓名、性别、年龄、届级、系、班级、通讯地址、电话、QQ、Email。

6 种操作分别为:添加、修改、查找、删除、排序以及展示校友信息。

同时为了方便按届级排序,程序会要求用户在输入届级时使用四位年份。

3、菜单模块

此模块将上述两模块进行了整合,是串联整个程序的模块。

读者可以在此模块下进行 7 个操作。它们分别是:

添加校友信息:进入添加状态,根据提示依次输入校友的信息,每条目输入完成后以回车结束。操作完成后程序会提示“添加成功”,后键入任意数字程序返回菜单。

修改校友信息:考虑到校友姓名的重复性极低,因此程序以校友姓名定位所需要修改的校友。首先用户输入需要修改信息的校友姓名,接着程序进行查找,若查找不到此姓名的校友,程序会提示“未找到此校友”;若成功定位校友信息,程序会提示“您选择的是 XXX 校友”。考虑到校友的姓名、性别、年龄、届级、系、班级等信息不易出现变更的情况,因此程序只提供了修改通讯地址、电话、QQ、Email 的操作。修改一条信息后,可键入任意数字返回上层结构选择修改其他信息。

查找校友信息:按照程序提示,用户可以选择按照不同的校友信息进行查找,程序会展示所有符合条件的校友。同时考虑到在以班级查找时,往往前面需要规定届级、系等信息才能得到实用的信息,因此程序还提供了按照届级、系、专业班级查找的功能。一次查找完成后,用户可以键入任意数字返回上层结构继续选择其他的查找方式。

删除校友信息:与修改校友信息的操作类似,删除校友信息时也按照姓名进行定位。删除操作完成后,程序会提示“删除完成”;若找不到此校友,程序会提示“未找到此校友”。后键入任意数字返回菜单。

排序校友信息:程序提供了两种不同的排序方式,分别是按照姓名或届级排序。姓名是以字典序排序。两种排序方式都以升序排列。排序完成后用户可以选择展示排序后的结果,也可以键入任意数字返回菜单。

展示校友信息:直接展示当前所有校友的信息。在排序前,顺序任意。展示完成后,用户可以键入任意数字返回菜单。

修改登录密码:修改操作完成后,程序会提示“修改成功!”,后键入任意数字返回菜单。

若在菜单中直接输入-1,程序会保存所有信息后退出。为了能妥善保存程序运行时用户对不同信息的操作,强烈建议用户通过输入-1 退出程序。

3.2 系统分析及设计

系统有一个基本类:人员类。人员类可以派生出校友类。另外还有一个校友链表类。因为排序功能的需要,校友链表类实际是由校友类派生出来的。

可以采用面向对象的程序设计实现校友录管理系统,在校友类中存储校友信息,在链表类中实现所有功能的编写,最后通过菜单来实现所有功能的串联。

以文本文件进行数据的读入与保存,在用户登录前,将校友的信息和用户的密码读入。用户选择-1 退出程序时,进行保存。需要保存的数据包括校友信息和用户的密码。文件的读写通过链表类的成员函数和菜单实现。

同时在用户选择退出程序时,通过调用析构函数来释放链表所占用的内存空间,以此防止内存泄漏。

3.3 系统的实现

(1)类的编写

系统工程名为:ARMS。设置了一个基类:people 类。由此派生出 alumnus 类即校友类,每个校友都有对应的包括姓名性别在内的 10 个不同的信息。。

具体类结构声明如下:

People 类:

# ifndef PEOPLE
# define PEOPLE
# include <iostream>
# include <string>
# include<bits/stdc++.h>
using namespace std;
class people{public:string name;string sex;string phone;people (string na="null",string se="null",string ph="null"):name(na),sex(se),phone(ph){}string cname(string a)//改名字 {return name=a;}string csex(string a)//改性别 {return sex=a;}void peopledisplay(){cout<<"姓名:"<<name<<endl;cout<<"性别:"<<sex<<endl;cout<<"电话:"<<phone<<endl;} };
# endif

alumnus 类

# ifndef Alumnus
# define Alumnus
# include"people.h"
using namespace std;
class alumnus:public people{public:alumnus(string na="null",string se="null",int ag=0,string gra="null",string col="null",string cls="null",string add="null",string ph="null",string q="null",string e="null"):people(na,se,ph),age(ag),grade(gra),college(col),classroom(cls),address(add),qq(q),email(e){}//构造函数 alumnus *next;alumnus* getnext()const{return next;}string gname() const{ return name;}//获得不同的数据 string gsex() const {return sex;}int gage() const {return age;} string ggrade() const {return grade;} string gcollege() const {return college;} string gclassroom() const {return classroom;} string gaddress() const {return address;} string gphone() const {return phone;}string gqq() const {return qq;} string gemail() const {return email;} void alumnusdisplay();//展示校友名录 void caddress();//考虑到校友姓名到班级这几项内容不会更改所以只可以更改地址电话QQemail四项内容 void cqq();void cphone();void cemail();void setnull(){name="null";}//将姓名设置为nullbool ifnamefull(); //判断是不是null void changedata(alumnus *a,alumnus *b);//交换数据 protected:int age;string  grade;//用四位年份输入 string college;//系string classroom;//使用string是因为很多大学班级前都加专业名称 string address;string qq;string email;};# endif

(2)链表的使用

系统采用文件的输入输出流对文本数据进行读取与写入,但是由于校友信息是一个数据的集合,于是对数据的存储组织使用了单向链表。

因为校友录管理系统在查找、修改、添加、删除、排序的时候都需要处理大量的数据,所以使用链表十分必要。因此在 alumnus 类的基础上定义一个对应的 alumnuslist 类来管理校友信息,具体的结构声明如下:

# ifndef Alumnuslist
# define Alumnuslist
# include"people.h"
# include"alumnus.h"
using namespace std;class alumnuslist:public alumnus{protected:int size;alumnus* ptr;public:alumnuslist():ptr(0),size(0){}void find(int i);//查找    void remove(string na);//按姓名删除数据 void add(alumnus& a);//添加信息到链表中void alumnuslistdisplay();void addalumnus(alumnus& a);//增加新校友 void write();//写入文件void sortname() ;//按姓名排序 void sortgrade();//按届级排序 alumnus* findname(string a);~alumnuslist();
};
# endif

在运用时,令当前校友的 next 结点指向新的校友结点,即结点的指针 next 保存新的校友结点的地址(如下图 2 所示),以此类推,所有校友信息就通过链表的形式串联起来了。

图 2 校友链表的建立

校友录管理系统的信息的管理就具体表现为链表的操作。校友录信息的查找、修改、添加、删除、排序与链表的查找、修改、添加、删除、排序对应

添加校友信息:

用户在添加校友信息时,需要按照程序提示依次输入添加的校友的各类信息,添加完成后,程序会提示“添加成功!”,见图 3:

图 3 添加校友信息界面

添加过程中,程序会建立一个 alumnus 类的对象来储存新的校友信息。当用户按照程序提示输入完成后,程序会使用 alumnuslist 类中的 add 函数来将新的校友信息增加到链表中。

add 函数实现如下:

图 4 add 函数

添加校友信息的流程图如图 5:

 ![](https://www.writebug.com/myres/static/uploads/2021/11/20/2db613613b6c03d8edcd29793b6baa83.writebug)

图 5 添加校友信息流程图

修改校友信息:

在用户在修改校友信息时,需要先按照程序提示输入需要修改的校友姓名,后提供 4 种修改方式,见图 6:

图 6 修改校友信息界面

另外,若用户在输入需要修改的校友姓名时输入错误,程序会提示“未找到此校友”;若用户输入了正确的校友姓名,程序会提示“您选中的是XXX校友”。

修改时程序只需要调用当前指针所指向对象的更改函数即可。如更改通讯地址则调用 caddress 函数。caddress 函数具体如图 7:

图 7 caddress 函数

修改校友信息的流程图如图 8:

图 8 修改校友信息流程图

查找校友信息:

在用户在查询校友信息时,有 11 种不同的模式,见图 9:

图 9 查找校友信息界面

这 11 种情况都需要对链表中的所有数据进行顺序的搜索。 例如校友姓名的查找,定义一个 alumnus 类指针变量 r 并对其初始化,使其为 ptr。

图 10 查找校友信息界面

从第一个 alumnuslist 类的第一个节点开始,会将文档里的校友姓名和用户输入的姓名比较,不一致时,r=r->next,与第二个数据对比,以此类推,直到找到相同姓名的校友,此时调用函数 r->alumnusdisplay()输出关于该校友所有的信息,即它的 10 个变量的数据。

如果没有找到可以匹配的,则 cout<<“没有找到相关校友信息”<<endl;并结束循环。

考虑到其他搜索模式,例如按照性别查找会出现多名校友符合条件的情况,因此程序找到一个符合条件的校友后不会停止遍历。如此可以向用户展现所有符合条件的校友。

查找校友信息的流程图如图 11:

图 11 查找校友信息流程图

删除校友信息:

用户在删除校友信息时,需要先按照程序提示输入需要删除的校友姓名,删除完成后,程序会提示“删除成功”,见图 12:

图 12 删除校友信息界面

另外,若用户在输入需要删除的校友姓名时输入错误,程序会提示“未找到此校友”。

删除时,程序会调用 alumnuslist 类中的 remove 函数。remove 函数的原理是:用指针 pn 遍历整个链表搜索同姓名校友的过程中,用 last 指针记住 pn 指针前一个结点的地址。当找到符合条件校友后,用 last 的 next 直接指向 pn 的下一个结点,以此实现删除的目的。remove 函数具体见图 13:

图 13 remove 函数

删除校友信息的流程图如图 14:

![](https://www.writebug.com/myres/static/uploads/2021/11/20/dd3760607d20f5a19ff81ea8bfa34cbd.writebug)

图 14 删除校友信息流程图

排序校友信息:

用户在排序校友信息时,有 2 种不同的模式,见图 15:

图15 排序校友信息界面

在排序中,程序使用了选择排序的方法。以按姓名排序为例,即 sortname 函数为例。函数用 i 指针遍历链表,用 j 指针遍历 i 指向结点后的链表,同时用 k 指针记录 i 后链表内姓名字典序最小的结点,随后使用 changedata 函数交换 i/k 指针指向对象内除 next 指针以外其他的数据,以此实现选择排序的功能。sortname 函数具体如图 16:

图 16 sortname 函数

按届级排序原理相似。

另外,排序完成后程序会提示“排序成功!”,同时用户可以选择展示排序结果或者返回上层结构。

排序校友信息的流程图如图 17:

![](https://www.writebug.com/myres/static/uploads/2021/11/20/5582d7bc47e764f64a993eb79b152fd6.writebug)

图 17 排序校友信息流程图

展示校友信息:

程序会展示当前链表所有结点的数据,部分界面如图 18:

图18 展示校友信息的部分界面使用alumnuslistdisplay函数实现整个链表的展示,使用pn指针实现遍历链表。alumnuslistdisplay函数具体如图19:

图 19 alumnuslistdisplay 函数

展示校友信息的流程图如图 20:

![](https://www.writebug.com/myres/static/uploads/2021/11/20/1a196003404fb8c617947e201433753d.writebug)

图 20 展示校友信息流程图

(3)交互界面

程序菜单界面如图 21 所示:

图 21 菜单界面

程序主要通过选择结构和循环结构实现界面的前进和后退。

(4)欢迎与登录界面

程序开始时的欢迎界面如图 22 所示:

图 22 欢迎与登录界面

用户共有五次输入登录密码的机会,如果连续五次输入错误,程序会自动退出,以此来保护信息的安全。

四、 实验调试、测试、运行记录及分析

系统在调试测试过程中遇到若干问题,不过经过仔细反复的检查已经消除各种 bug。

主要的测试经过如下:

在欢迎与登录界面输入“123456”成功登陆,随后跳转到菜单。

然后输入“3,屏幕上跳出查找校友界面。

然后输入“3”,随后输入“20”,查找 20 岁的校友信息。

然后键入任意数字即可返回上层结构。

遇到的问题及解决方法如下:

问题 1:

问题描述:在初段调试时,出现无法正常排序的情况。

解决方法:仔细分析 sortname 和 sortgrade 函数的逻辑结构,并输出 i/k 两指针指向对象的数据。综合分析后发现寻找最小值的循环多了一个大括号(如图 23 标红处),这使得无论是否找到最小值,i/k 指针指向的对象中的数据都会被交换。删除此大括号后,排序结果符合预期。

图 23 调试测试问题解决 1

问题 2:

问题描述:发现在展示所有校友信息时,每个校友之间的分割不够明显,让使用者难以辨认(如图 24)。

解决方法:在 alumnuslistdisplay 函数中加入一行代码,每输出一个校换行一次(如图 25 标红处)。

图 24 调试测试问题 2 图 25 调试测试问题解决 2

♻️ 资源

大小: 1.64MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87379030

基于C++实现(控制台)校友录管理系统【100010421】相关推荐

  1. 基于JavaEE的同学录校友录管理系统_JSP网站设计_SqlServer数据库设计

    目    录 1 引言1 1.1 目的和意义1 1.2 开发设计思想1 1.3 国内外研究情况1 2 开发工具和环境简介2 2.1 JSP技术简介2 2.2 JSP工作原理2 2.3 JSP体系结构3 ...

  2. 基于JAVA天津城建大学校友录管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA天津城建大学校友录管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA天津城建大学校友录管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源 ...

  3. php校友录毕业论文,基于WEB的同学校友录的设计(PHP,MySQL)(附答辩记录)

    基于WEB的同学校友录的设计(PHP,MySQL)(附答辩记录)(选题审批表,任务书,开题报告,中期报告,毕业论文7700字,文献综述,答辩记录,成绩评定册) 摘 要:通过提供便捷的校友录平台和人性化 ...

  4. c语言校友录系统,个人校友录管理系统下载

          个人校友录管理系统官方版是一款操作非常简单的校友信息记录管理软件,个人校友录管理系统官方版功能强大主要可以为用户记录一些同学信息,包括,电话,联系方式,个人校友录管理系统最新博纳还可以有效 ...

  5. 杰出校友录管理系统C语言,校友录管理系统概要设计.doc

    校友录管理系统概要设计 姓 名:龙云所 学 院:传媒与信息工程 专 业:12软件 学 号:20121112118 指 导 教 师:刘春华 目录: 一 ......................... ...

  6. 基于javaweb+jsp的校友信息管理系统

    基于javaweb+jsp的校友信息管理系统 JavaWeb JavaBean JSP MVC MySQL Tomcat JavaScript Layui Ajax 基础JSP+Servlet或JSP ...

  7. 基于asp的大学校友录

    基于asp的大学校友录 QQ:204181568 同学录,是记录同学的家庭住址.联系方式.电话号码.个性语言等信息的册籍.又方便联系,增进了解,回忆过去的作用.如今,伴随真互联网的快速发展,国内外出现 ...

  8. 基于Springboot实现校友录管理系统

    项目编号:BS-PT-018 数据库:mysql 开发工具:IDEA /  Eclipse 开发语言:JAVA 使用框架:Springboot+SSM 本系统基于Springboot和SSM框架来实现 ...

  9. Java项目-基于Springboot实现校友录管理系统

    项目编号:BS-PT-018 数据库:mysql 开发工具:IDEA /  Eclipse 开发语言:JAVA 使用框架:Springboot+SSM 本系统基于Springboot和SSM框架来实现 ...

最新文章

  1. android weight(权重)的具体分析
  2. NHibernate ConfORM Mapping
  3. 条件、循环、函数定义 练习(2017.9.12)
  4. Java多线程02(线程安全、线程同步、等待唤醒机制)
  5. 计算机序号函数,EXCEL函数自动编号/编码单条件和多条件的几种方法
  6. 消息中间件学习总结(17)——MQ与RPC的区别和关联
  7. 2.RabbitMQ实战 --- 理解消息通信
  8. react 翻书效果_react.js 翻页插件实例代码
  9. 华为novia3i鸿蒙,华为nova3i一马当先:值得年轻人购买的智能手机推荐
  10. 实操:WDS安装win系统
  11. 2017年度全球一级市场“投资龙虎榜”发布 | 钛媒体Pro独家
  12. 揭露数据不一致的利器 —— 实时核对系统
  13. 基于JMF录制和播放视频源码
  14. 总结下macbook 安装win10 双系统丢驱动的问题
  15. 基于Javaweb实现的人脸识别+GPS定位考勤系统
  16. 敏捷迭代就是小瀑布吗?为什么创业团队更敏捷?
  17. 【软件测试】黑盒测试方法小结
  18. Eclipse4.4.2(luna) JDK1.8.0_212 PyDev5.2.0 Python2.7
  19. 计算机无法在安全模式下完成安装,最近我的电脑安装不了软件,总提示说Windows在安全模式下运行? 爱问知识人...
  20. 如何用网络管理软件灵活管理复杂庞大的网络

热门文章

  1. 7种实用的分布式框架
  2. 使用rpm安装telnet软件并实现远程登录
  3. 如何建立零售行业的数据分析模型
  4. 2022年机修钳工(高级)练习题及模拟考试
  5. 使用tesseract识别二维码
  6. 从新出发——慕书读书正式更名为“慕书+”
  7. win8连接WiFi受限解决方案
  8. 串口通讯(USART)
  9. python制作流动图_可视化也能秀,教你用Python制作GIF动图
  10. 02年超级计算机算力4800h,AMD锐龙9 5900H夺下世界第一笔记本CPU