C++综合应用实例_第1页
C++综合应用实例_第2页
C++综合应用实例_第3页
C++综合应用实例_第4页
C++综合应用实例_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C/C+综合应用实例1、数据代数运算系统的设计(相当于计算器)2、学生成绩管理系统的设计3、三角形面积验证程序的设计1、数据代数运算系统的设计(相当于计算器)问题:设计一个计算器程序,完成整数间的加、减、乘、除设计一个计算器程序,完成整数间的加、减、乘、除以及求运算,以及累加求和、计算以及求运算,以及累加求和、计算n!等。!等。 (1)计算器程序设计文档 (2)使用TC开发的dos界面程序; (3)程序运行演示; 这样的系统不好,我们可以将其改写为图形界面 (4)图形界面程序演示; (5) 图形界面程序源代码2、学生成绩管理系统的设计例2:编写程序,实现学生成绩管理:要求实现 用户登录,用户登

2、录, 显示主菜单,显示主菜单, 学生信息的输入学生信息的输入, 学生信息的输出,学生信息的输出, 按学号查询学生信息,按学号查询学生信息, 按成绩降序排序,按成绩降序排序, 追加学生信息,追加学生信息, 把学生信息保存到文件,把学生信息保存到文件, 从文件中导出学生信息从文件中导出学生信息 等有关的功能。等有关的功能。 关于该设计题目的有关问题与分析:(1)采用的程序设计方法的选择?)采用的程序设计方法的选择? A)面向结构的设计方法?面向结构的设计方法? B)面向对象的设计方法?面向对象的设计方法?(2)运行界面的选择?)运行界面的选择? A) DOS界面的设计?界面的设计? B) 图形界面

3、(图形界面(Windows界面)?界面)? (3)数据类型的定义)数据类型的定义 (结构体或类的定义)(结构体或类的定义)(4)(数据结构的定义)存放数据的方式)(数据结构的定义)存放数据的方式 顺序表(数组存放一个班学生信息)顺序表(数组存放一个班学生信息) 链表(利用指针存放一个班的学生信息)链表(利用指针存放一个班的学生信息)该题目的分析与设计:本题目可以采用本题目可以采用4种方式实现:种方式实现: (1)采用面向结构的程序设计方法,用)采用面向结构的程序设计方法,用顺序顺序表(数组和结构表(数组和结构体),体),DOS界面。界面。(2)采用面向结构的程序设计方法,用)采用面向结构的程序

4、设计方法,用链表链表(指针和结构体),(指针和结构体),DOS界面界面(3)采用面向对象的程序设计方法,用)采用面向对象的程序设计方法,用顺序表顺序表(定义顺序表(定义顺序表类),类),DOS界面界面(4)采用面向对象的程序设计方法,用)采用面向对象的程序设计方法,用链表链表(定义(定义链表链表类),类),DOS界面界面 另外,对这另外,对这4种方式,都可以采用种方式,都可以采用Windows(图形图形)界面实现。界面实现。(1)采用面向结构的程序设计方法)采用面向结构的程序设计方法 用用顺序顺序表(数组和结构体)表(数组和结构体)DOS界面界面采用面向结构的程序设计方法,用采用面向结构的程序

5、设计方法,用顺序顺序表表(数组和结构体),(数组和结构体),DOS界面界面处理过程:(1)定义学生结构体;)定义学生结构体;(2)定义学生数组()定义学生数组(一般放到主函数中定义一般放到主函数中定义) 这里要注意,学生人数问题这里要注意,学生人数问题(3)按功能要求定义各有关功能函数;)按功能要求定义各有关功能函数; 这里要注意,每个函数的参数及其函数的返回值这里要注意,每个函数的参数及其函数的返回值(4)设计主函数,实现系统所要求的功能。)设计主函数,实现系统所要求的功能。思考:思考: 假设将(假设将(2)定义成一个)定义成一个“班级结构体班级结构体”,那么,整,那么,整个系统该如何实现)

6、;个系统该如何实现);(1)定义学生结构体;)定义学生结构体;struct st char Class20; /班级 int num; /学号 char name8; /姓名 float kc6; /各课程成绩(6门) float ave; /平均成绩 int order; /名次 ;按功能要求定义各有关功能函数按功能要求定义各有关功能函数 (1)学生信息的输入)学生信息的输入(输入学生的信息,存放到数组输入学生的信息,存放到数组s中,返回实际学中,返回实际学生个数给生个数给n,注意:输入的结束条件如何设计?注意:输入的结束条件如何设计?) void iuput(st s int *n); (

7、2)将数组)将数组s中,中,n个学生信息输出,要求:按一定得格式输出学生信个学生信息输出,要求:按一定得格式输出学生信息(最好是表格格式,并且当学生人数较多时,应按页显示)息(最好是表格格式,并且当学生人数较多时,应按页显示) void pint(st s,int n) (3)从数组)从数组s,n个学生信息中,查询学号为个学生信息中,查询学号为x的学生信息,并返回查找的学生信息,并返回查找成功是(位置号)否(成功是(位置号)否(-1)。)。 int find(st s,int n, int x) (4)将数组将数组s,n个学生信息中按平均成绩降序排序,形成排序数组个学生信息中按平均成绩降序排序

8、,形成排序数组y。 sort(st s,int n,st y) (5)在数组在数组s,n个学生信息的未,输入追加学生信息。个学生信息的未,输入追加学生信息。 该功能的实现,可以使用(该功能的实现,可以使用(1)输入学生信息功能)输入学生信息功能(6)将数组)将数组s,n个学生信息,保存到文件个学生信息,保存到文件f中。中。 save(st s,int n, char *f) (7) 从文件从文件f中导出学生信息中导出学生信息,存放到数组存放到数组s中,并返回实际学生人数中,并返回实际学生人数n。 load(char *f,st s,int &n)给出每个函数的具体实现 同学们自己给出各

9、函数的源代码。同学们自己给出各函数的源代码。设计主函数,实现系统所要求的功能设计主函数,实现系统所要求的功能定义学生数组:定义学生数组: 这里要注意,学生人数问题这里要注意,学生人数问题Void main() st *t; 定义数组定义数组 int m; 数组的最大空间数组的最大空间 int n; 实际学生人数实际学生人数 m=1000; st=new stm; n=0; 显示菜单,分别调用有关的函数。显示菜单,分别调用有关的函数。 (3)采用面向对象的程序设计方法)采用面向对象的程序设计方法 用用顺序表顺序表(定义(定义顺序表类顺序表类) DOS界面界面采用面向结构的程序设计方法,用采用面向

10、结构的程序设计方法,用顺序表顺序表(定义(定义顺序表类顺序表类),),DOS界面界面处理过程:(1)定义学生类;)定义学生类;(2)定义班级类)定义班级类(3)设计主函数,定义有关的对象,并调用有关的函数,)设计主函数,定义有关的对象,并调用有关的函数,完成系统功能。完成系统功能。分析:分析: 由于成绩管理是由多名学生构成的,所以需要定义由于成绩管理是由多名学生构成的,所以需要定义学生类学生类; 另外,由多个学生,形成一个班或年级,所以还需要定义另外,由多个学生,形成一个班或年级,所以还需要定义一个一个班级(年级)类班级(年级)类(1)定义学生类;)定义学生类;class st private

11、: char Class20; /班级 int num; /学号 char name8; /姓名 float kc6; /各课程成绩(6门) float ave; /平均成绩 int order; /名次 public: 分析:关于学生类,该有哪些函数成员?分析:关于学生类,该有哪些函数成员? ;学生类,函数成员的定义与实现学生类,函数成员的定义与实现public: (1) 构造函数的定义:构造函数的定义: 利用参数传递,形成一个学生利用参数传递,形成一个学生 有键盘输入形成一个学生有键盘输入形成一个学生 (2) 输出学生信息函数;输出学生信息函数; (2)定义班级类)定义班级类class b

12、j private: int m; /私有变量,顺序表实例的最大长度私有变量,顺序表实例的最大长度 int n; / 私有变量,顺序表实例的当前长度私有变量,顺序表实例的当前长度 st *s; /存放学生的数组(利用指针实现)存放学生的数组(利用指针实现) public: 分析:关于班级类,该有哪些函数成员?分析:关于班级类,该有哪些函数成员?;班级类,函数成员的定义与实现班级类,函数成员的定义与实现public: (1) 构造函数的定义:构造函数的定义: 利用参数传递,形成班级 由数组由数组s中,中,n各学生,形成班级各学生,形成班级 bj(st s int n); 有键盘输入形成班级 学生

13、信息的输入学生信息的输入(输入的结束条件如何设计?输入的结束条件如何设计?) bj(); 有文件导入,形成班级; 从文件从文件f中导出学生信息中导出学生信息, bj(char *f)其它成员函数其它成员函数 (2)输出学生信息,要求:按一定得格式输出学生信息)输出学生信息,要求:按一定得格式输出学生信息(最好是表格格式,并且当学生人数较多时,应按页显示)(最好是表格格式,并且当学生人数较多时,应按页显示) void pint() (3)查询学号为)查询学号为x的学生信息,并返回查找成功是(位置的学生信息,并返回查找成功是(位置号)否(号)否(-1)。)。 int find(int x) (4)

14、 按平均成绩降序排序,形成新类。按平均成绩降序排序,形成新类。 st sort() (5)在学生信息的未,输入追加学生信息。在学生信息的未,输入追加学生信息。 注意:输入的结束条件如何设计?注意:输入的结束条件如何设计? void input() (6)在学生信息的未,通过文件在学生信息的未,通过文件f,追加学生信息。追加学生信息。 void app(char *f) (7)保存到文件)保存到文件f中。中。 void save(char *f) 给出每个函数的具体实现 同学们自己给出各函数的源代码。同学们自己给出各函数的源代码。设计主函数,实现系统所要求的功能设计主函数,实现系统所要求的功能定

15、义有关的对象定义有关的对象Void main() bj b; 定义班级对象定义班级对象 st s; 定义学生对象定义学生对象 显示菜单,分别调用有关的函数。显示菜单,分别调用有关的函数。 链表成绩管理1.链表的定义与结构描述2.链表的有关操作实现3.利用链表结构实现成绩管理 (1) 成绩管理的功能分析 (2) 成绩管理的类定义与实现3 采用面向对象的程序设计方法,采用面向对象的程序设计方法,用用链表链表(定义(定义链表链表类),类),DOS界面界面1 单链表单链表通过指针把它的一串存储结点链接成一个链 存储结点由两部分组成: data字段 next 字段 data next头指针指向下一个节点

16、的指针附加头结点结点尾指针单链表的结点类型struct ListNode int data;ListNode * next; ;data next问题问题(有关链表的操作有关链表的操作):n 如何定义如何定义(申明申明)一个链表呢一个链表呢?n 如何形成一个链表呢如何形成一个链表呢?n 在链表中指定的位置处在链表中指定的位置处,如何插入一个节点呢如何插入一个节点呢?n 在链表中如何删除一个节点呢在链表中如何删除一个节点呢?n 一个链表中一个链表中,有几个数据元素呢有几个数据元素呢?如何定义如何定义(申明申明)一个链表呢一个链表呢? 一个链表一般只要告诉该链表的头指针即可。定义链表: struc

17、t ListNode *first 该链表所有的操作,全部是从该链表所有的操作,全部是从“first”开始,开始, 并且,该指针并且,该指针永远永远指向第一个位置指向第一个位置。一个链表是如何形成呢一个链表是如何形成呢?一个链表的形成,一般需要两步:First(2)在空链表的基础上不断的插入节点,从而形成链表。)在空链表的基础上不断的插入节点,从而形成链表。 一般分为:在前插入、在后插入两种一般分为:在前插入、在后插入两种(1)首先形成一个空链表:)首先形成一个空链表:NULL(0)构造空单链表LinkList() first=new ListNode; first-next =0; ;fir

18、st(a) 建空表建空表建立单链表建立单链表头插法建立单链表图示头插法建立单链表图示 first(a) 建空表建空表c1ss 指向新申请的结点指向新申请的结点sdatac1(b) 申请新结点并赋值申请新结点并赋值firstlast(c) 插入第一个结点插入第一个结点 last=slast=sc1执行的语句组为执行的语句组为:snextfirstnext;firstnexts;ci1firstc2c1cis(d) 插入第插入第i个元素个元素头插法头插法尾插法建表尾插法建表 尾插法建表图示尾插法建表图示 c1ss 指向新申请的结点空间指向新申请的结点空间sdatac1(b) 申请新结点并赋值申请新

19、结点并赋值firstL(a ) 建空表建空表lastfs(c) 插入第一个结点插入第一个结点c1lastlasts;last指向链表的结尾指向链表的结尾c1firstc2last nexts;(d) 插入第二个结点插入第二个结点sr将新建的节点插入到链表的最后将新建的节点插入到链表的最后尾指针尾指针在头结点之后插入一个新结点void LinkList:insert(int a)ListNode *temp;temp=new ListNode;temp-data=a;temp-next=0;temp-next=first-next; first-next=temp;执行的语句组为执行的语句组为:

20、snextfirstnext;firstnexts;ci1firstc2c1cis 插入第插入第i个元素个元素单链表的建立(调用插入函数,可以创建链表:形成具有n个元素的链表)void LinkList:create(int n) int i=0; int data; cout endlplease input the data of the list; while (idata; insert(data); i+; 查找单链表中第i个结点算法 ListNode * FindIndex(const int i) ListNode *pif( i = -1) return first; p=fi

21、rst-next; /int j=0; while( p !=NULL & j next;j+;return p; 单链表插入算法 (第i节点前插入)La1ai1aianpre(a) 寻找第寻找第 i1 个结点个结点es(b) 申请新的结点申请新的结点preLa1ai1aianes 与与ai连链连链: :snextprenextai-1与与ai断断链链, ,插入插入 e:prenexts;(c) 插入插入单链表插入算法ListNode * Insert(int value, int i) / 插入数据内容为value的新结点,为第i个结点。 ListNode *p,*q;q = new

22、 ListNode; q-data = value; p = FindIndex(i-1);if(p = NULL ) return NULL; q-next = p-next; p-next = q; return q; pLa1ai1aianeq 与与ai连链连链: :snextprenextai-1与与ai断断链链, ,插入插入 e:prenexts;(c) 插入插入单链表删除算法 void RemoveAfter(ListNode * link) /删除参数link的后继结点 ListNode *newlink;if(link!=NULL) newlink=link-next; lin

23、k-next=newlink-next link-next=link-next-nexy delete newlink; 求长度算法int Length() ListNode *p=first-next;int count=0;while(p!=NULL)p=p-next;count+;return count; La0ai1aian( ) p单链表的类定义单链表的类定义分析分析1数据成员数据成员: 两个指向结点的指针两个指向结点的指针:头指针和尾指针头指针和尾指针 2成员函数成员函数: (1) 构造函数构造函数 /创建并形成一个初始链表创建并形成一个初始链表 (2)析构函数析构函数 /删除构

24、造函数所创建的链表删除构造函数所创建的链表 (3)插入元素函数插入元素函数 /在表的第在表的第i 个位置处个位置处,插入数据或在表尾插入元素插入数据或在表尾插入元素 (4)删除元素函数删除元素函数 /删除表中数值为删除表中数值为x的元素的元素 (5)查找元素查找元素 /在表中查找数据为在表中查找数据为x的元素在表中的位置的元素在表中的位置 (6)输出链表输出链表 /从头到尾输出表中的所有的元素从头到尾输出表中的所有的元素 (7)判定链表是否为空判定链表是否为空 /为了进行删除进行的一种判定为了进行删除进行的一种判定 (8) 将链表设置为一个空表将链表设置为一个空表 / (9)计算链表的长度计算

25、链表的长度 /统计链表中元素个数统计链表中元素个数 (10) 将链表元素值写到文件中将链表元素值写到文件中 (11) 将文件中的数据读到链表中将文件中的数据读到链表中 class LinkList /链表类链表类 private: ListNode *first,*last; /链表的表头指针和尾指针链表的表头指针和尾指针 public: LinkList ( ) LinkList ( ) ; /析构函数析构函数 ListNode *Insert ( int value, int i ); Listnode *insert(intvalue) int Remove (int value );

26、ListNode *FindIndex ( int value ); void PrintList( ); /遍历单链表遍历单链表 void MakeEmpty ( ); /将链表置为空表将链表置为空表 int Length ( ) const; /计算链表的长度计算链表的长度 int NotNull ( ) ; /判断是否是空表判断是否是空表 void create();单链表的类定义单链表的类定义三、利用链表结构实现成绩管理三、利用链表结构实现成绩管理 (1) 成绩管理的功能分析 (2) 成绩管理的类定义与实现要求:1简单的系统与功能分析2建立数据结构表3要建立一个测试的数据表,至少要有2

27、0个测试数据4使用数据链表实现数据的:录入、查询、修改、增加、删除、统计、输出,一、定义学生成绩管理系统的数据结构表一、定义学生成绩管理系统的数据结构表序号 成员名 数据类型 长度 字段含义 1 Class int 班级 2 num int 学号 3 name char 8 姓名 4 kc0 float 电子技术 5 kc1 float C+程序设计 6 kc2 float 多媒体技术 7 kc3 float 大学英语 8 kc4 float 高等数学 9 kc5 float 大学体育 10 Ave float 平均成绩 11 Order int 名次 13 next ”自定义的结构类型 “

28、指针,指向下一个结点二、根据所要求的成绩管理系统定义类系统的功能要求: 使用数据链表实现如下功能: 初始链表的建立,录入、查询、修改、增加、删除、统计、输出等功能。(一一)数据定义数据定义(类的数据成员说明类的数据成员说明): 一个指向学生结构的头指针一个指向学生结构的头指针; (注意注意:该指针就是链表的头该指针就是链表的头)struct node int Class; /班级 int num; /学号 char name8; /姓名 float kc6; /各课程成绩(6门) float ave; /平均成绩 int order; /名次 node *next; /指针;class cj

29、private: struct node *head; public: 待定义的各功能函数待定义的各功能函数 结点定结点定义义类定义类定义(二)操作定义(函数功能划分划分)1.初始链表的建立初始链表的建立: 利用类的构造函数构造函数,建立一个只有附加头结点附加头结点的空链表空链表; 2.录入录入(增加一个增加一个)学生信息学生信息: 由键盘一个一个输入学生的信息,并链到链表中; (注意:什么时候停止输入呢?即:输入的结束条件?) 如何链到链表上呢?(在表的尾上追加尾上追加)3.追加结点追加结点: 在链表尾上链上一个结点(p所指的结点):4.链表的建立链表的建立: 在空链表已经建立的基础上,向链

30、表中提供信息(注意:采用先提供的信息在表的前面,依次向后); 可以分为两种方式: (1)由键盘一个一个输入学生的信息,并链到链表中; (可以直接使用添加学生操作;即使用2) (2)利用文件将文件中的内容读入利用文件将文件中的内容读入,并链到链表中并链到链表中5.定位定位: 提供学生的学号,在链表中查找该学生所在链表中的位置 (返回指向该结点的一个指针) (注意:该操作是为后面的操作服务的,特别是:删除、修改、查询)6.查询查询: 提供学生的学号,在链表中查找该学生并输出该学生的信息(包括学生的名次)7.删除删除: 提供学生的学号,在链表中查找该学生,并从表中删除学号是该值的学生8.修改成绩修改

31、成绩: 提供学生的学号,在链表中查找该学生,找到后先显示原来的学生信息,然后修改(重新输入)学生信息 9.统计统计: 给出各课成绩的平均分,总平均分,并分别按各课程统计成绩段的人数:优秀人数、良好人数、中等人数、及格人数,不及格人数, 并按一定的格式将所有统计结果显示出来。10.排序排序(降序降序): 按学生的平均成绩进行由小到大排序,新形成一个排序链表,. (注意:该操作是为其它操作服务的;例如:5(查询)可以使用,当添加学生或删除学生以及修改学生成绩后,都需要重新排序)11.输出链表输出链表: 按链表中的先后次序输出表中的所有信息 (注意:该操作为按顺序输出信息和排序输出服务):12. 写

32、文件写文件: 将进行各种操作后所形成的链表信息,写入文件中,备以后使用时,利用3(2)再读入形成链表. (注意:可以形成两类文件:按输入的顺序,按排序后的)13. 其他的一些服务操作: (1)析构函数析构函数: (2)输出表头函数输出表头函数: (为功能、6、7、8、11、12服务) (3)输出输出P指针所指结点信息指针所指结点信息: (为功能: 6、7、8、11、12服务)类声明:由以上分析,可以给出成绩管理的类声明:class cj private: struct node *head; public: cj(); /1:构造函数构造函数,建立一个只有建立一个只有附加头结点附加头结点的的空

33、链表空链表 input(); / 2:向链表中添加学生的信息向链表中添加学生的信息(在表的在表的尾上追加尾上追加) appen(node *p); /3.追加结点追加结点: 在链表尾上链上一个结点在链表尾上链上一个结点(p所指的结点所指的结点) void rf(char *f); /4.读文件,形成链表读文件,形成链表 node *post(int num); /5.定位定位: 提供学号提供学号, 返回指向该结点的一个指针返回指向该结点的一个指针) void lookup(int num); / 6.查询查询 提供学号提供学号, 查找学生并输出学生的信息查找学生并输出学生的信息 void De

34、lete(int num); /7.删除删除: 提供学号提供学号, 删除学号是该值的学生删除学号是该值的学生 void modify(int num); /8.修改成绩修改成绩: 提供学号提供学号, 修改修改(重新输入重新输入)学生信息学生信息 void statistic() ; /9.统计函数统计函数,统计平均成绩统计平均成绩 void sort(cj &h); /10.排序排序(降序降序): 按平均成绩排序按平均成绩排序,形成排序的链表形成排序的链表h void Insert(cj &h,node *p); /在有序表在有序表h中结点后仍有序中结点后仍有序(排序的一个辅助

35、函数排序的一个辅助函数: void output(); /11: 输出链表中各结点值输出链表中各结点值 void wf(char *f); /12. 由链表由链表,形成文件形成文件 cj(); / 13(1):析构函数析构函数,程序运行结束时程序运行结束时,删除链表中的各结点删除链表中的各结点, void print1(); /13(2): 输出一个同学的成绩输出一个同学的成绩(标题标题) void print2(node *p); /13(3) 输出一个同学的成绩输出一个同学的成绩 node *gethead()return head; /13(4)获取头指针获取头指针 int Length

36、 ( ) const; /13(5) 计算链表的长度计算链表的长度;cj:cj() /1:构造函数构造函数,建立一个只有附加头结点附加头结点的空链表空链表head=new node;head-next=0;void cj: input() / 2:录入学生信息录入学生信息: 由键盘一个一个输入学生的信息由键盘一个一个输入学生的信息,并在表的尾上追加并在表的尾上追加) int Class; char name8; int num; float c6,ave; int order; node *p2; int t,i; coutt; while(t=1) cout请输入班级请输入班级,姓名姓名,学

37、号学号,电子技术电子技术,C+,数学,数学,; cout英语,政治,体育成绩英语,政治,体育成绩Classnamenumc0c1c2c3c4c5; p2=new node; ave=(c0+c1+c2+c3+c4+c5)/6; p2-Class=Class; p2-num=num; strcpy(p2-name,name); for(i=0;ikci=ci; p2-order=0; p2-ave=ave; appen(p2); coutt; void cj: appen(node *p) /3.追加结点追加结点: 在链表尾上链上一个结点在链表尾上链上一个结点(p所指的结点所指的结点) node

38、 *p1,*p2; p1=head; p2=p1-next; while(p2) p1=p2; p2=p2-next; p1-next=p; p-next=p2; void cj:rf(char *f) /4.读文件,形成链表读文件,形成链表 int Class; char name8; int num; float c6,ave; int order; char ss250; /存放标题的存放标题的 node *p2; ifstream ff;ff.open(f);ff.getline(ss,200); /取第一行标题取第一行标题ff.getline(ss,200); /取第二行标题取第二行

39、标题ffClassnamenumc0c1c2c3c4c5;while(!ff.eof() p2=new node; ave=(c0+c1+c2+c3+c4+c5)/6; p2-Class=Class; p2-num=num; strcpy(p2-name,name); for(i=0;ikci=ci; p2-order=0; p2-ave=ave; appen(p2); ffClassnamenumc0c1c2c3c4c5;ff.close();node cj:*post (int num) /5.定位定位: 提供学号提供学号, 返回指向该结点的一个指针返回指向该结点的一个指针) node *

40、p1,*p2; p1=head; if(p1-next=0) return 0; p2=p1-next; while(p2-num!=num & p2-next!=0) p1=p2; p2=p2-next; if(p2-num=num) return p2; else return 0; void cj:lookup(int num) / 6.查询查询 提供学号提供学号, 查找学生并输出学生的信息查找学生并输出学生的信息 node *p1; p1=post (num) ;/定位定位: 提供学号, 返回指向该结点的一个指针) if(p1!=0) print1(); /输出一个同学的成绩(

41、标题) print2(p1); /输出一个同学的信息 else cout无学生记录!next; if(p1=0) cout无学生记录无学生记录!num!=num & p2-next!=0) p1=p2; p2=p2-next; if(p2-num=num) p1-next=p2-next; delete p2;cout已删除了这个学生的记录已删除了这个学生的记录endl; else cout没找到该学生没找到该学生!endl; return;void cj:modify(int num) /8: 修改函数修改函数,修改对应学号的学生成绩修改对应学号的学生成绩 node *p,*p2;

42、p=post ( num) ;/定位定位: 提供学号, 返回指向该结点的一个指针) if(p!=0) float c6, cout原成绩:; print1(); print2(p); cout请输入新的成绩:c0c1c2c3c4c5; ave=(c0+c1+c2+c3+c4+c5)/6; for(i=0;ikci=ci; p-ave=ave; else cout没找到该学生!next; while(p1!=0) print2(p1); s1=s1+p1-kc0; s2=s2+p1-kc1; s3=s3+p1-kc2; s4=s4+p1-kc3; s5=s5+p1-kc4; s6=s6+p1-k

43、c5; i+; p1=p1-next; cout平均成绩平均成绩:endl; cout电子技术电子技术s1/itC+:s2/i; cout数学数学s3/it英语英语s4/it政治政治s5/it; cout体育体育s6/inext; while(p1) p2=new node; p2-ave=p1-ave; p2-Class=p1-Class; p2-num=p1-num;strcpy(p2-name,p1-name); for(j=0;jkcj=p1-kcj; Insert(h,p2); p1=p1-next; p1=h.gethead()-next; int i=1; while(p1!=0

44、) p1-order=i; i=i+1; p1=p1-next; void cj:Insert(cj &h, node *p) /在有序表中插入一个结点后仍有序(10.排序排序(降序降序)的一个辅助函数的一个辅助函数: ) node *p1,*p2; p1=h.gethead(); if (p1-next=0) p1-next=p; p-next=0; else p2=p1-next; while(p2-next & p2-avep-ave) p1=p2; p2=p2-next; p1-next=p; p-next=p2; void cj:output()/11: 输出链表中各

45、结点值输出链表中各结点值 node *p; p=head-next; cout输出学生信息:next; coutendl;void cj:wf(char *f) /12. 由链表由链表,形成文件形成文件 node *p;ofstream ff;ff.open(f); ff 学生成绩表endl;ff姓名 学号 班级 elec C+ 数学 英语 政治 体育 next;while(p) ffnametnumtClasst; ffkc0tkc1tkc2t; ffkc3tkc4tkc5next; ff.close(); cj:cj() / 13(1):析构函数析构函数,程序运行结束时程序运行结束时,删除

46、链表中的各结点删除链表中的各结点, node *p1; while(head) p1=head; head=head-next; delete p1; void cj:print1() /13(2): 输出一个同学的成绩(标题) cout“姓名 ”“学号 ”“班级 ”“电子 “; coutC+ 数学 英语 政治 体育 endl;void cj:print2(node *p) /13(3): 输出一个同学的成绩 int I; coutnametnumtClasst; for(i=0;i=5;+i) coutkci; coutnext; while(p!=0)n=n+1;p=p-next;retu

47、rn n;node cj: *gethead() /13(5)获取头指针return head;void main() /主函数主函数 cj A,B; int a; int num; while(1) cout*endl; cout* 欢迎使用本系统欢迎使用本系统(请选择你所要的功能请选择你所要的功能) *endl; cout 0.退出系统退出系统. endl; cout 1.成绩录入成绩录入. endl; cout 2.成绩修改成绩修改. endl; cout 3.成绩查询成绩查询. endl; cout 4.删除成绩删除成绩. endl; cout 5.顺序输出所有人的成绩顺序输出所有人的

48、成绩 . endl; cout 6.统计平均成绩统计平均成绩. endl; cout 7. 显示学生人数显示学生人数 endl; cout 8. 输出排序结果输出排序结果 endl; cout 9. 读文件读文件 endl; cout 10. 写文件写文件 endl; cout*endl; couta;switch(a) case 0: goto end; case 1:A.create();break; case 2:coutnum; A.modify(num); A.sort(B); break; case 3 :A.sort(B); coutnum; B.lookup(num); bre

49、ak; case 4:coutnum; A.Delete(num); break; case 5:A.output();break; case 6:A.statistic();break; case 7: cout学生人数学生人数为为:A.Length()endl; break; case 8:A.sort(B); B.output();break; case 9:A.rf(abc);break; case 10:A.wf(abc);break; default:break; ;cout按任意键继续操作按任意键继续操作!endl;getchar();end:; cout谢谢您使用本系统谢谢您使

50、用本系统!endl; 3、三角形面积验证程序的设计问题:问题: 给出求解下列问题逐步求精的分析过程给出求解下列问题逐步求精的分析过程,并设并设计程序完成其验证:计程序完成其验证: 已知一个正三角形已知一个正三角形ABC,其内分点,其内分点A1、B1、C1,使得,使得2AC1=C1B、2BA1=A1C、2CB1=B1A,连接连接CC1、BB1、AA1,三条直线分别相交于,三条直线分别相交于A2、B2、C2。要求编写程序验证。要求编写程序验证 ,三角形三角形A2B2C2的面的面积是三角形积是三角形ABC的面积的的面积的7分之一。分之一。分析问题的基本方法分析问题的基本方法 基本方法是:基本方法是:

51、 由顶向下,逐步求精;由顶向下,逐步求精; 即:即: 将复杂问题,分解为小问题,小问题解决了,将复杂问题,分解为小问题,小问题解决了,大问题也就解决了。大问题也就解决了。例如:如下的问题例如:如下的问题 已知一个正三角形已知一个正三角形ABC,其内分点,其内分点A1、B1、C1,使得使得2AC1=C1B、2BA1=A1C、2CB1=B1A,连接,连接CC1、BB1、AA1,三条直线分别相交于,三条直线分别相交于A2、B2、C2(见图(见图1)。)。要求编写程序验证要求编写程序验证 : 三角形三角形A2B2C2面积是三角形面积是三角形 ABC面积的七分之一面积的七分之一. A C1 B2 B1

52、A2 C2 B A1 C (7)建立平面直角坐标系;建立平面直角坐标系;。运用逻辑思维分析程序设计:运用逻辑思维分析程序设计: 设正三角形设正三角形ABC的边长为的边长为a,则本题目就是求两个三角形的面积,则本题目就是求两个三角形的面积,已知三角形的边长求面积,对于三角形已知三角形的边长求面积,对于三角形ABC是很容易的,但对于是很容易的,但对于三角形三角形A2B2C2的面积的求解却比较麻烦。的面积的求解却比较麻烦。(如何求呢如何求呢?)对于该问题的逻辑思维及其分析过程:对于该问题的逻辑思维及其分析过程:(1) 三角形三角形A2B2C2的面积的面积(2)求边长(求边长(A2B2、B2C2、C2

53、A2)(3)求交点坐标(求交点坐标(A2、B2、C2)(4)求直线方程(求直线方程(AA1、BB1、CC1)(5)求内分点坐标(求内分点坐标(A1、B1、C1)(6)已知边长已知边长a,确定三角形,确定三角形ABC的顶点坐标(的顶点坐标(A、B、C) A C1 B2 B1 A2 C2 B A1 C 分析分析实实现现设计分析(1)采用什么设计方法:)采用什么设计方法: 面向结构的设计方法?面向结构的设计方法? 面向对象的设计方法?面向对象的设计方法? (2)不同的设计方法,需要定义不同的数据结构(数据类)不同的设计方法,需要定义不同的数据结构(数据类型),如何定义数据结构;型),如何定义数据结构

54、; 结构体结构体 类类 (3)下面我们对两种设计方法,分别给出设计程序)下面我们对两种设计方法,分别给出设计程序 采用采用“面向结构的设计方法面向结构的设计方法”采用采用“面向结构的设计方法面向结构的设计方法”需要的工作步骤:需要的工作步骤: (1)定义有关的结构体:)定义有关的结构体: 点,直线,三角形点,直线,三角形 (2)给出有关的函数设计实现:)给出有关的函数设计实现: 根据前面的分析,需要定义什么函数,完成什么功能,根据前面的分析,需要定义什么函数,完成什么功能,使用什么参数,函数返回值及其类型;使用什么参数,函数返回值及其类型; (3)设计主函数:)设计主函数: 调用(调用(2)中

55、的函数,完成要求的功能。)中的函数,完成要求的功能。1、已知一个三角形、已知一个三角形t,求面积求面积mj;2、已知两顶点、已知两顶点a,b, 求内分点求内分点 (在这里两段的比值为在这里两段的比值为1:2);3、已知两顶点、已知两顶点p1,p2,求直线方程求直线方程line4、已知两直线、已知两直线l1,l2,求交点坐标,求交点坐标5、已知两点、已知两点P1,P2,求距离,求距离(1)首先,定义有关的数据结构(采用结构体)三角形结构(三边形成三角形)三角形结构(三边形成三角形)(a,b,c)struc T double a; double b; double c;直线方程结构直线方程结构:a

56、x+by+c=0struc L double a; double b; double c;点结构点结构:(x,y) struc P double x; double y; ;直线方程结构直线方程结构:y=kx+bstruc L double k; double b;或者或者(2)给出有关的函数设计 (注意:形参和函数的返回值):1、已知一个三角形t,求面积mj; double mj( T t) double L,ss; L=(t.a+t.b+t.c)/2; ss=sqr(L*(L-t.a)*(L-t.b)*(L-t.c); return ss; 2、已知两顶点a,b, 求内分点 (在这里两段的

57、比值为1:2); P fd( P a, P b) P q; q.x=(b.x-a.x)/3+a.x; q.y=(b.y-a.y)/3+a.y; return q; 3、已知两顶点p1,p2,求直线方程line (ax+by+c=0) L zx(P p1,P p2) L q; 实现过程. 4、已知两直线l1,l2,求交点坐标 P jd(L l1,L l2) 实现过程. 5、已知两点P1,P2,求距离 double jl(P p1,P p2) 实现过程. (3)设计主函数(调用前面的各函数,完成计算)Void main() P A,B,C,A1,B1,C1,A2,B2,C2; L L1,L2,L3

58、; double d1,d2,d3,s1,s2; double a=10.00; B.x=0;B.y=0; A.x=a/2;A.y=a*sqr(3)/2; C.x=a;C.y=0; A1=fd(B,C);B1=fd(C,A);C1=fd(A,B); L1=zx(A,A1);L2=zx(B,B1);L3=zx(C,C1); A2=jd(L1,L2);B2=jd(L1,L3);C2=jd(L2,L3); d1=jl(A2,B2);d2=jl(B2,C2);d3=j;(C2,A2); s1=mj(a,a,a); s2=mj(d1,d2,d3); if (fabs(s1-7*s2)=0.001) /? cout“正确!”;else cout“错误!” A C1 B2 B1 A2 C2 B A1 C 采用采用“面向对象的设计方法面向对象的设计方法”采用采用“面向对象的设计方法面向对象的设计方法”需要的工作步骤:需要的工作步骤

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论