您好,欢迎访问三七文档
C/C++综合应用实例1、数据代数运算系统的设计(相当于计算器)2、学生成绩管理系统的设计3、三角形面积验证程序的设计1、数据代数运算系统的设计(相当于计算器)问题:设计一个计算器程序,完成整数间的加、减、乘、除以及求运算,以及累加求和、计算n!等。(1)计算器程序设计文档(2)使用TC开发的dos界面程序;(3)程序运行演示;这样的系统不好,我们可以将其改写为图形界面(4)图形界面程序演示;(5)图形界面程序源代码2、学生成绩管理系统的设计例2:编写程序,实现学生成绩管理:要求实现用户登录,显示主菜单,学生信息的输入,学生信息的输出,按学号查询学生信息,按成绩降序排序,追加学生信息,把学生信息保存到文件,从文件中导出学生信息等有关的功能。关于该设计题目的有关问题与分析:(1)采用的程序设计方法的选择?A)面向结构的设计方法?B)面向对象的设计方法?(2)运行界面的选择?A)DOS界面的设计?B)图形界面(Windows界面)?(3)数据类型的定义(结构体或类的定义)(4)(数据结构的定义)存放数据的方式顺序表(数组存放一个班学生信息)链表(利用指针存放一个班的学生信息)该题目的分析与设计:本题目可以采用4种方式实现:(1)采用面向结构的程序设计方法,用顺序表(数组和结构体),DOS界面。(2)采用面向结构的程序设计方法,用链表(指针和结构体),DOS界面(3)采用面向对象的程序设计方法,用顺序表(定义顺序表类),DOS界面(4)采用面向对象的程序设计方法,用链表(定义链表类),DOS界面另外,对这4种方式,都可以采用Windows(图形)界面实现。(1)采用面向结构的程序设计方法用顺序表(数组和结构体)DOS界面采用面向结构的程序设计方法,用顺序表(数组和结构体),DOS界面处理过程:(1)定义学生结构体;(2)定义学生数组(一般放到主函数中定义)这里要注意,学生人数问题(3)按功能要求定义各有关功能函数;这里要注意,每个函数的参数及其函数的返回值(4)设计主函数,实现系统所要求的功能。思考:假设将(2)定义成一个“班级结构体”,那么,整个系统该如何实现);(1)定义学生结构体;structst{charClass[20];//班级intnum;//学号charname[8];//姓名floatkc[6];//各课程成绩(6门)floatave;//平均成绩intorder;//名次};按功能要求定义各有关功能函数(1)学生信息的输入(输入学生的信息,存放到数组s中,返回实际学生个数给n,注意:输入的结束条件如何设计?)voidiuput(sts[]int*n);(2)将数组s中,n个学生信息输出,要求:按一定得格式输出学生信息(最好是表格格式,并且当学生人数较多时,应按页显示)voidpint(sts[],intn)(3)从数组s,n个学生信息中,查询学号为x的学生信息,并返回查找成功是(位置号)否(-1)。intfind(sts[],intn,intx)(4)将数组s,n个学生信息中按平均成绩降序排序,形成排序数组y。sort(sts[],intn,sty[])(5)在数组s,n个学生信息的未,输入追加学生信息。该功能的实现,可以使用(1)输入学生信息功能(6)将数组s,n个学生信息,保存到文件f中。save(sts[],intn,char*f)(7)从文件f中导出学生信息,存放到数组s中,并返回实际学生人数n。load(char*f,sts[],int&n)给出每个函数的具体实现同学们自己给出各函数的源代码。设计主函数,实现系统所要求的功能定义学生数组:这里要注意,学生人数问题Voidmain(){st*t;\\定义数组intm;\\数组的最大空间intn;\\实际学生人数m=1000;st=newst[m];n=0;显示菜单,分别调用有关的函数。}(3)采用面向对象的程序设计方法用顺序表(定义顺序表类)DOS界面采用面向结构的程序设计方法,用顺序表(定义顺序表类),DOS界面处理过程:(1)定义学生类;(2)定义班级类(3)设计主函数,定义有关的对象,并调用有关的函数,完成系统功能。分析:由于成绩管理是由多名学生构成的,所以需要定义学生类;另外,由多个学生,形成一个班或年级,所以还需要定义一个班级(年级)类(1)定义学生类;classst{private:charClass[20];//班级intnum;//学号charname[8];//姓名floatkc[6];//各课程成绩(6门)floatave;//平均成绩intorder;//名次public:分析:关于学生类,该有哪些函数成员?};学生类,函数成员的定义与实现public:(1)构造函数的定义:利用参数传递,形成一个学生有键盘输入形成一个学生(2)输出学生信息函数;(2)定义班级类classbj{private:intm;//私有变量,顺序表实例的最大长度intn;//私有变量,顺序表实例的当前长度st*s;//存放学生的数组(利用指针实现)public:分析:关于班级类,该有哪些函数成员?};班级类,函数成员的定义与实现public:(1)构造函数的定义:利用参数传递,形成班级由数组s中,n各学生,形成班级bj(sts[]intn);有键盘输入形成班级学生信息的输入(输入的结束条件如何设计?)bj();有文件导入,形成班级;从文件f中导出学生信息,bj(char*f)其它成员函数(2)输出学生信息,要求:按一定得格式输出学生信息(最好是表格格式,并且当学生人数较多时,应按页显示)voidpint()(3)查询学号为x的学生信息,并返回查找成功是(位置号)否(-1)。intfind(intx)(4)按平均成绩降序排序,形成新类。stsort()(5)在学生信息的未,输入追加学生信息。注意:输入的结束条件如何设计?voidinput()(6)在学生信息的未,通过文件f,追加学生信息。voidapp(char*f)(7)保存到文件f中。voidsave(char*f)给出每个函数的具体实现同学们自己给出各函数的源代码。设计主函数,实现系统所要求的功能定义有关的对象Voidmain(){bjb;\\定义班级对象sts;\\定义学生对象显示菜单,分别调用有关的函数。}链表成绩管理1.链表的定义与结构描述2.链表的有关操作实现3.利用链表结构实现成绩管理(1)成绩管理的功能分析(2)成绩管理的类定义与实现3采用面向对象的程序设计方法,用链表(定义链表类),DOS界面1单链表•通过指针把它的一串存储结点链接成一个链•存储结点由两部分组成:–data字段–next字段datanext头指针指向下一个节点的指针附加头结点结点尾指针单链表的结点类型structListNode{intdata;ListNode*next;};datanext问题(有关链表的操作):如何定义(申明)一个链表呢?如何形成一个链表呢?在链表中指定的位置处,如何插入一个节点呢?在链表中如何删除一个节点呢?一个链表中,有几个数据元素呢?如何定义(申明)一个链表呢?一个链表一般只要告诉该链表的头指针即可。定义链表:structListNode*first该链表所有的操作,全部是从“first”开始,并且,该指针永远指向第一个位置。一个链表是如何形成呢?一个链表的形成,一般需要两步:First(2)在空链表的基础上不断的插入节点,从而形成链表。一般分为:在前插入、在后插入两种(1)首先形成一个空链表:NULL(0)构造空单链表LinkList(){first=newListNode;first-next=0;};first(a)建空表建立单链表头插法建立单链表图示first(a)建空表c1ss指向新申请的结点s->data=c1(b)申请新结点并赋值firstlast(c)插入第一个结点last=sc1执行的语句组为:s->next=first->next;first->next=s;ci-1first…c2c1cis(d)插入第i个元素头插法尾插法建表尾插法建表图示c1ss指向新申请的结点空间s->data=c1(b)申请新结点并赋值firstL(a)建空表lastfs(c)插入第一个结点c1lastlast=s;last指向链表的结尾c1firstc2①②last->next=s;(d)插入第二个结点sr将新建的节点插入到链表的最后尾指针在头结点之后插入一个新结点voidLinkList::insert(inta){ListNode*temp;temp=newListNode;temp-data=a;temp-next=0;temp-next=first-next;first-next=temp;}执行的语句组为:s->next=first->next;first->next=s;ci-1first…c2c1cis插入第i个元素单链表的建立(调用插入函数,可以创建链表:形成具有n个元素的链表)voidLinkList::create(intn){inti=0;intdata;coutendlpleaseinputthedataofthelist;while(in){cindata;insert(data);i++;}}查找单链表中第i个结点算法ListNode*FindIndex(constinti){ListNode*pif(i==-1)returnfirst;p=first-next;//intj=0;while(p!=NULL&&ji){p=p-next;j++;}returnp;}单链表插入算法(第i节点前插入)La1…ai-1ai…anpre(a)寻找第i-1个结点es(b)申请新的结点preLa1…ai-1ai…anes①与ai连链:s->next=pre->next②ai-1与ai断链,插入e:pre->next=s;(c)插入单链表插入算法ListNode*Insert(intvalue,inti)//插入数据内容为value的新结点,为第i个结点。{ListNode*p,*q;q=newListNode;q-data=value;p=FindIndex(i-1);if(p==NULL)returnNULL;q-next=p-next;p-next=q;returnq;}pLa1…ai-1ai…aneq①与ai连链:s->next=pre->next②ai-1与ai断链,插入e:pre->next=s;(c)插入单链表删除算法voidRemoveAfter(ListNode*link)//删除参数link的后继结点{ListNode*newlink;if(link!=NULL)newlink=link-next;link-next=newlink-nextlink-next=link-next-nexydeletenewlink;}求长度算法intLength(){ListNode*p=first-next;intcount=0;while(p!=NULL){p=p-next;count++;}returncount;}La0…ai-1ai…an()p单链表的类定义分析1数据成员:两个指向结点的指针:头指针和尾指针2成员函数:(1)构造函数//创建并形成一个初始链表(2)析构函数//删除构造函数所创建的链表(3)插入元素函数//在表的第i个位置处,插入数据或在表尾插入元素(4)删除元素函数//删除表中数值为x的元素(5)查找元素//在表中查找数据为x的元素在表中的位置(6)输出链表//从头到尾输出表中的所有的元素(7)判定链表是否为空//为了进行删除进行的一种判定(8)将链表设置为一个空表//(9)计算链表的长度//统计链表中元素个数(10)将链表元素值写到文件中(11)将文件中的数据读到链表中classLinkList//链表类{private:ListNode*first,*last;//链表的表
本文标题:C++综合应用实例
链接地址:https://www.777doc.com/doc-7028869 .html