C/C++数据结构项目实践与应用

4 篇文章 0 订阅

资料获取:


链接:https://pan.baidu.com/s/1Z8mnEeizu04qNfQesUxing 
提取码:6666 
--来自百度网盘超级会员V5的分享

1.C++分数计算器

C++分数计算器各种分数计算类型都能计算

一 目的

(1)定义一个整数类。 定义一个分数类,由整数类派生。能对分数进行各种计算和输入/输出。可进行分数的加、减、乘和除法等四则运算。

流程图:
在这里插入图片描述
流程图
在这里插入图片描述

二 需求分析

1、问题描述

实现分数的计算器功能,对分数进行四则运算和输入/输出。

2、需求以及实现功能介绍

(1)定义整数类和分数类。其中,包括构造函数、析构函数、显示函数等。

(2)输入/输出:对流提取和流插入运算符进行重载。

(3)计算功能:可进行分数的加、减、乘和除法运算。

(4)化简功能:将分数化简为最简分数。

(5)异常处理功能:分数中分母不能为零。

(6)菜单功能:每种功能的操作都是在菜单中进行相应选择。

3、设计步骤

根据系统功能要求,可以将问题解决分为以下步骤:

(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;

(2)分析系统中的各个实体及它们之间的关系;

(3)根据问题描述,设计系统的类层次;

(4)完成类层次中各个类的描述;

(5)完成类中各个成员函数的定义;

(6)完成系统的应用模块;

(7)功能调试;

(8)完成系统总结报告。

三 概要设计

1、函数类设计

(1)正数类设计

class Integer      //定义一个整数类

{

  protected:     //私有属性 

     int fz;    //分子 

     int fm;    //分母 

  public:            //公有属性 

     Integer(int a=0,int b=1):fz(a),fm(b){}

     ~Integer(){}    //析构函数 

     void display();  //显示函数 

};

2、整数类派生分数类的关系

3、所有函数和类的定义

Fraction(int a=0,int b=1):Integer(a,b){}//分数类成员

            friend istream & operator>>(istream &input,Fraction &); //输入重载

            friend ostream & operator<<(ostream &output,Fraction &); //输出重载    

            Fraction operator+(Fraction &c);//重载+运算符(分数和分数) 

            Fraction operator+(int n);//重载+运算符(整数与分数)               

            Fraction operator-(Fraction &c);//重载-运算符(分数与分数) 

            Fraction operator-(int n);//重载-运算符(整数与分数) 

            friend Fraction operator-(int n,Fraction &c);                  

            Fraction operator*(Fraction &c);//重载*运算符(分数与分数) 

            Fraction operator*(int n);//重载*运算符(整数与分数)                

            Fraction operator/(Fraction &c);//重载/运算符(分数与分数)

            Fraction operator/(int n);//重载/运算符(整数与分数) 

            friend Fraction operator/(int n,Fraction &c);              

            Fraction predigest();//约分函数

            void display();//输出函数 

main() //主函数

四 详细设计

设计流程图:

在这里插入图片描述

五 调试分析

1、调试方法


    首先打开开发软件Visual Studio,运行程序,出现错误修改再运行,直至运行结果0 error , 0 warning 结束。接着进入程序界面,看程序能否实现所要求的各项功能,再作下一步的修改。

2、调试时出现的问题及解决方案:

 

    (1)当多次运行程序时,屏幕被运行数据占满,显得很杂乱。

    解决方案:引用清屏函数,及时销掉所占内存。

    (2)在进行运算时要实现反复运算得有返回功能,由于我们程序分支,不能正常的调用完毕后进入下一个循环,自动返回。

    解决方案:用if语句,判断输入功能对于的数字,然后运行函数块。

    (3)还有一些小错误,比如未声明就直接使用变量、未对一些变量初始化、声明是空值函数却有返回值、缺少";"、使用getch() , system("cls")却                                              缺少相应的头文件﹐出现警告。

六 测试结果

1、主界面调试

在这里插入图片描述

2、分数与整数运算调试:
在这里插入图片描述

七 用户使用说明

 按照屏幕上的提示进行操作,输入整数与分数,其次按照页面弹出来的文字进行分数与分数的四则运算或者整数与分数的四则运算。分数计算器程序的每种功能都可以用菜单选项列出,用户可以根据需要选择相应的菜单项,从而执行不同的子程序以完成相应的功能。增加运算符重载功能,使所设计的分数计算器可以进行四则运算&幂运算&逻辑运算。四则运算&幂运算可以用菜单选项列出,用户可以根据需要选择相应的运算。程序具有判断功能,当有非法的输入时(如分母等于零等),能给出提示信息并退出运算。

八 课程设计总结

    在这次C++编程过程中,我基本完成了编写程序和实习要求,经过知识的考验,让我深有感触,也让我知道编程不仅需要聪明的头脑,而且也需要耐心和恒心。在程序调试过程中,出现了很多错误和本不应该出现的毛病,然在老师的指导和同学们的帮助下,我把调试过程中的错误和毛病一一更正,完成了调试和编写程序过程,在这里我对谆谆教导我的老师和鼎立相助的同学们表示感谢。

    在这次设计中,我清楚的知道自己的知识结构和能力水平的不足,在原有的基础之上更应该有待加强,学人之长,补己之短,也要严谨认真的对待每一个问题。同时也要加强自身的自学能力和提高自我解决问题的能力水平,在这次实习中,我清楚的知道自己的知识结构和能力水平的不足,在原有的基础之上更应该有待加强,学人之长,补己之短,也要严谨认真的对待每一个问题。同时也要加强自身的自学能力和提高自我解决问题的能力水平。

    在设计过程中涉及到派生类,必须从整数类中派生分数类,还得有构造函数、析构函数、显示函数等。 虽说上面这些老师都讲过,但我还没有掌握住,不得不把书拿出来看一遍。随后就是分数与分数,分数与整数,整数与分数的约分了,若果两个分数相加还得同分,约分,求出最大公约数。又上网补习了这一方面的知识,还好网上的这些知识比较容易理解,在这方面没有浪费多长时间。最后无非就是输入输出流的重载了,说真的我对这些知识懵懵懂懂,一知半解。途中这方面出了问题,也不知道哪错了,日志里就是说输入输出流里面的问题,于是又上网查了些这些问题,最后不知道改了哪个地方,程序好了,能运行了,搞得我很懵逼。既然程序能运行了,我就试着运行了,首先我运行了分数与整数的运算,没啥问题,对我来说是个很好的信号。随后我又运行了分数与分数运算,出错了结果为0,我试着查找问题所在,最后原来是赋值错了,修改完毕,运行完美,到此结束,程序结束。虽说做本次实验途中出现了许多问题,但最后也都被解决了。从中看出了自己的不足之处有很多,希望通过本次实验以后自己能汲取这些失败的教训,为以后的学习打好坚实的基础。

2.C++高校人员信息管理系统

一、基本内容论述
1、问题描述 某高校有四类员工:教师、实验员、行政人员、教师兼行政人员;共有的信息包括:编号、姓名、性别、年龄等。其中,教师还包含的信息有:所在系部、专业、职称;实验员还包含的信息由:所在实验室、职务;行政人员还包含的信息有:政治面貌、职称等。

2、功能要求

(1)添加功能:程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。

(2)查询功能:可根据编号、姓名等信息对已添加的记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。

(3)显示功能:可显示当前系统中所有记录,每条记录占据一行。

(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。

(5)删除功能:主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作;否则,输入要删除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存。

(6)统计功能:能根据多种参数进行人员的统计。能统计四类人员数量以及总数,统计男、女员工的数量。

(7)保存功能:可将当前系统中各类人员记录存入文件中,存入方式任意。

(8)读取功能:可将保存在文件中的人员信息读入到当前系统中,供用户进行使用。

1、系统总体方案
使用面向对象的编程思想,系统分为四大板块,分别为教师、实验员、行政人员、教师兼行政人员等管理信息模块,定义高校员工类保存公共属性,共有的信息包括:编号、姓名、性别、年龄等,学校员工类为college_staff, 教师、实验员、行政人员、教师兼行政人员等类分别继承此员工类。工类派生出教师类、实验员类、行政人员类,教师类和行政人员类派生出教师兼行政人员类。程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求人员的编号要唯一,如果添加了重复编号的记录时,则提示用户数据添加重复并取消添加。各个功能选择循环和分支选择完成各个功能的选择。

(1) 教师类teacher:继承员工类college_staff,实现添加,查询,显示,删除,统计,保存,读取等功能,通过继承可以很好的实现功能的继承使用。成员函数分别有 int Add();int Search();void Show();void Edit();int Delete();void Save();

void Read();。

(2) 实验员类tester:继承员工类college_staff,实现添加,查询,显示,删除,统计,保存,读取等功能,实验员还包含的信息有:所在实验室、职务。 成员函数分别有 int Add();int Search();void Show();void Edit();int Delete();void Save();

void Read();。

(3) 行政人员类officer,继承员工类college_staff,实现添加,查询,显示,删除,统计,保存,读取等功能,成员函数分别有  int Add();int Search();void Show();void Edit();int Delete();void Save();void Read();。行政人员还包含的信息有:政治面貌、职称等。

(4) 教师兼职行政人员类teacher_officer ,继承员工类college_staff,教师类teacher和行政人员类officer,实现添加,查询,显示,删除,统计,保存,读取等功能,成员函数分别有   int Add();int Search();void Show();void Edit();int Delete();void Save();void Read();。

2、设计思路和主要步骤
根据需求分析,首先我们需要建立员工college_staff基类,由此派生出了教师类(teacher),实验员类(tester),行政人员类officer,教师兼职行政人员类teacher_officer。通过进一步分析,由于基类中的构造函数不能被继承,而且在派生类中又需要增加自己的数据成员,所以我们必须定义派生类的构造函数来完成相应的初始化。我们通过类的继承实现增加不同功能的成员函数如:void Add(); //增加人员 void Delete(); //删除人员 void Edit (); //编辑人员信息void Search (); //查询人员, void Save(); //数据存盘 void Read(); //读取文件———为了实现多文件的效果,我们对员工类各个属性继承,然后逐一对各功能函数进行代码编写。最后,我们定义了主函数,通过公司类创建了一个对象,并通过此对象完成相应的操作。在调试并测试代码过程中,当输入相应的指令后,该系统自动调用相应的功能函数来达到需求效果,至此,一个高校人员信息管理系统的实现才算基本成功。

3、各功能模块和流程图
(1)各功能模块

1)添加功能:程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求人员的编号要唯一,如果添加了重复编号的记录时,则提示用户数据添加重复并取消添加。2)查询功能:可根据编号、姓名等信息对已添加的记录进行查询。如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。3)显示功能:可显示当前系统中所有记录。4)修改功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。5)删除功能:对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作;否则输入要删除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存在。6)统计功能:能根据多种参数进行人员的统计。例如:统计四类人员数量以及总数,统计男、女员工的数量,统计某年龄段人员的数量等。7)保存功能:将当前系统中各类人员记录存入文件中。8)读取功能:将保存在文件中的人员信息读入到当前系统中,以供用户使用。

(2)流程图

1主函数流程
在这里插入图片描述

界面:
在这里插入图片描述
在这里插入图片描述

二、实验结果测试
列出各功能具体的输入数据及对应的输出结果,说明其是否符合设计要求:

三、心得体会
通过本次设计课学到了很多,相比之前的C++语言上机,难度有很大的提升,以前仅仅涉及变量,函数和条件语句,和循环语句等基本概念,而这次像老师说的那样是一个工程。本学期的学期期间也进行过几次的上机实习,不过是根据老师给的现成题目进行简单编程,并没有像C++课设那样庞大。在一开始进行课程的时候,我感到有些无法适应并且跟不上进度。前两次上课的时候,对于本次的题目“学生成绩管理系统”感觉无从下手,根据老师发的源代码,才有一点点眉目。本次C++语言课程设计对我来说是一一个挑战, 虽说不上一波三折,但过程绝不轻松。同时也让我认识到扎实基本功的重要性。在课设过程中,有许多的细节需要去注意和纠正,太过于草率导致的后果就是会忽略掉很多必需的点,最终结果就是程序不能成功地运行。在这次课程设计中,我们首先对系统的整体功能进行了构思,然后用结构化分析方法进行分析,将整个系统清楚的划分为几个模块,再根据每个模块的功能编写代码。而且尽可能的将模块细分,最后在进行函数的调用。我们在函数的编写过程中,我们不仅用到了for循环、while循环和switch语句,还用到了函数之间的调用(包括递归调用)。由于我们是分工编写代码,最后需要将每个人的代码放到一起进行调试。因为我们每个人写的函数的思想不都一样,所以在调试的过程中也遇到了困难,但经过我们耐心的修改,终于功夫不负有心人,我们成功了。最后,我认为C++语言课程设计是一个可以供我们慢慢钻研的课程,而学会最基本的C++语言知识是非常重要的。要沉下心来认真钻研。感谢老师能从多个角度提供帮助,启发我们自己发现问题并解决,引导我们独立思考。祝老师万事胜意!

3.C/C++ 济南大学的校园导游图

1)设计济南大学的校园导游图,所含景点不少于10个。以图中顶点表示学校各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
(3)校园导游图可以根据需要随时增加景点和道路
(4)可以求出任意两个景点之间的所有路径
(5)多个景点的最佳访问路线查询,即经过这多个景点的最短路径。
(6)为来访客人提供图中任意景点相关信息的查询。
在这里插入图片描述
部分代码

#include<iostream>
#include<string>
#include<fstream>
#define MAXN 100
#define MAXINT 100000

using namespace std;

//景点结点的定义
class Spot
{
	public:
	string m_name;
	string m_intro;
};

//图的定义
typedef struct{
	Spot vexs[MAXN];
	int arcs[MAXN][MAXN]; //邻接矩阵
	int vexnum,arcnum; //顶点个数,边的个数   
}MGraph;
//在图中建立联系的函数
void createArcs(MGraph &graph, string loc1, string loc2, int dist, int num= MAXN)
{
	int tmp1,tmp2;
	//定位
	for(int i = 0; i < num; i++)
	{
	if(graph.vexs[i].m_name == loc1)
	{
		tmp1 = i;
		break;
	}
	}
	for(int i = 0; i < num; i++)
	{
	if(graph.vexs[i].m_name == loc2)
	{
		tmp2 = i;
		break;
	}
	}
	graph.arcs[tmp1][tmp2] = graph.arcs[tmp2][tmp1] = dist;
}

4.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值