资源描述
会计学1C综合应用综合应用(yngyng)实例实例第一页,共98页。(4)图形界面程序演示;(5) 图形界面程序源代码第1页/共98页第二页,共98页。第2页/共98页第三页,共98页。第3页/共98页第四页,共98页。第4页/共98页第五页,共98页。第5页/共98页第六页,共98页。第6页/共98页第七页,共98页。第7页/共98页第八页,共98页。第8页/共98页第九页,共98页。第9页/共98页第十页,共98页。第10页/共98页第十一页,共98页。第11页/共98页第十二页,共98页。第12页/共98页第十三页,共98页。分析:分析: 由于成绩管理是由多名学生构成的,所以需要定义学生类;由于成绩管理是由多名学生构成的,所以需要定义学生类; 另外另外(ln wi),由多个学生,形成一个班或年级,所以还需要定,由多个学生,形成一个班或年级,所以还需要定义一个班级(年级)类义一个班级(年级)类第13页/共98页第十四页,共98页。第14页/共98页第十五页,共98页。第15页/共98页第十六页,共98页。public: 分析:关于班级类,该有哪些函数成员?;第16页/共98页第十七页,共98页。第17页/共98页第十八页,共98页。 int find(int x)第18页/共98页第十九页,共98页。第19页/共98页第二十页,共98页。第20页/共98页第二十一页,共98页。第21页/共98页第二十二页,共98页。3 采用面向对象的程序设计方法采用面向对象的程序设计方法(fngf),用链表(定义链表类),用链表(定义链表类),DOS界面界面第22页/共98页第二十三页,共98页。data next头指针(zhzhn)指向(zh xin)下一个节点的指针附加头结点结点尾指针第23页/共98页第二十四页,共98页。data next问题问题(有关链表的操作有关链表的操作): 如何定义如何定义(申明申明)一个链表呢一个链表呢? 如何形成一个链表呢如何形成一个链表呢? 在链表中指定的位置在链表中指定的位置(wi zhi)处处,如何插入一个节点呢如何插入一个节点呢? 在链表中如何删除一个节点呢在链表中如何删除一个节点呢? 一个链表中一个链表中,有几个数据元素呢有几个数据元素呢?第24页/共98页第二十五页,共98页。定义(dngy)链表: struct ListNode *first 该链表所有的操作,全部是从该链表所有的操作,全部是从“first”开始,开始, 并且,该指针并且,该指针永远永远指向第一个位置指向第一个位置。第25页/共98页第二十六页,共98页。First(2)在空链表的基础上不断的插入节点,从而形成)在空链表的基础上不断的插入节点,从而形成(xngchng)链表。链表。 一般分为:在前插入、在后插入两种一般分为:在前插入、在后插入两种(1)首先形成一个空链表:)首先形成一个空链表:NULL(0)第26页/共98页第二十七页,共98页。first(a) 建空表建空表第27页/共98页第二十八页,共98页。建立建立(jinl)单链表单链表头插法建立头插法建立(jinl)单链表图示单链表图示 first(a) 建空表建空表c1ss 指向新申请的结点指向新申请的结点sdatac1(b) 申请新结点并赋值申请新结点并赋值firstlast(c) 插入第一个结点插入第一个结点 last=slast=sc1执行的语句组为执行的语句组为:snextfirstnext;firstnexts;ci1firstc2c1cis(d) 插入第插入第i个元素个元素头插法头插法第28页/共98页第二十九页,共98页。尾插法建表尾插法建表 尾插法建表图示尾插法建表图示 c1ss 指向新申请的结点空间指向新申请的结点空间sdatac1(b) 申请新结点并赋值申请新结点并赋值firstL(a ) 建空表建空表lastfs(c) 插入第一个结点插入第一个结点c1lastlasts;last指向链表的结尾指向链表的结尾c1firstc2last nexts;(d) 插入第二个结点插入第二个结点sr将新建的节点插入将新建的节点插入(ch r)到链表的最后到链表的最后尾指针尾指针(zhzhn)第29页/共98页第三十页,共98页。执行执行(zhxng)的语句组为的语句组为:snextfirstnext;firstnexts;ci1firstc2c1cis 插入插入(ch r)(ch r)第第i个元素个元素第30页/共98页第三十一页,共98页。第31页/共98页第三十二页,共98页。第32页/共98页第三十三页,共98页。La1ai1aianpre(a) 寻找第寻找第 i1 个结点个结点es(b) 申请新的结点申请新的结点preLa1ai1aianes 与与ai连链连链: :snextprenextai-1与与ai断断链链, ,插入插入 e:prenexts;(c) 插入插入第33页/共98页第三十四页,共98页。pLa1ai1aianeq 与与ai连链连链: :snextprenextai-1与与ai断断链链, ,插入插入 e:prenexts;(c) 插入插入第34页/共98页第三十五页,共98页。第35页/共98页第三十六页,共98页。La0ai1aian( ) p第36页/共98页第三十七页,共98页。分析分析1数据成员数据成员: 两个指向结点的指针两个指向结点的指针(zhzhn):头指针头指针(zhzhn)和尾指针和尾指针(zhzhn) 2成员函数成员函数: (1) 构造函数构造函数 /创建并形成一个初始链表创建并形成一个初始链表 (2)析构函数析构函数 /删除构造函数所创建的链表删除构造函数所创建的链表 (3)插入元素函数插入元素函数 /在表的第在表的第i 个位置处个位置处,插入数据或在表尾插入元素插入数据或在表尾插入元素 (4)删除元素函数删除元素函数 /删除表中数值为删除表中数值为x的元素的元素 (5)查找元素查找元素 /在表中查找数据为在表中查找数据为x的元素在表中的位置的元素在表中的位置 (6)输出链表输出链表 /从头到尾输出表中的所有的元素从头到尾输出表中的所有的元素 (7)判定链表是否为空判定链表是否为空 /为了进行删除进行的一种判定为了进行删除进行的一种判定 (8) 将链表设置为一个空表将链表设置为一个空表 / (9)计算链表的长度计算链表的长度 /统计链表中元素个数统计链表中元素个数 (10) 将链表元素值写到文件中将链表元素值写到文件中 (11) 将文件中的数据读到链表中将文件中的数据读到链表中 第37页/共98页第三十八页,共98页。class LinkList /链表类链表类 private: ListNode *first,*last; /链表的表头指针和尾指针链表的表头指针和尾指针 public: LinkList ( ) LinkList ( ) ; /析构函数析构函数(hnsh) ListNode *Insert ( int value, int i ); Listnode *insert(intvalue) int Remove (int value ); ListNode *FindIndex ( int value ); void PrintList( ); /遍历单链表遍历单链表 void MakeEmpty ( ); /将链表置为空表将链表置为空表 int Length ( ) const; /计算链表的长度计算链表的长度 int NotNull ( ) ; /判断是否是空表判断是否是空表 void create();单链表的类定义单链表的类定义(dngy)(dngy)第38页/共98页第三十九页,共98页。,第39页/共98页第四十页,共98页。第40页/共98页第四十一页,共98页。(一一)数据定义数据定义(类的数据成员说明类的数据成员说明(shumng): 一个指向学生结构的头指针一个指向学生结构的头指针; (注意注意:该指针就是链表的头该指针就是链表的头)struct node int Class; /班级 int num; /学号 char name8; /姓名 float kc6; /各课程成绩(6门) float ave; /平均成绩 int order; /名次 node *next; /指针;class cj private: struct node *head; public: 待定义的各功能函数待定义的各功能函数 结点定义结点定义类定义类定义第41页/共98页第四十二页,共98页。第42页/共98页第四十三页,共98页。 (2)利用文件将文件中的内容读利用文件将文件中的内容读入入,并链到链表中并链到链表中第43页/共98页第四十四页,共98页。第44页/共98页第四十五页,共98页。第45页/共98页第四十六页,共98页。第46页/共98页第四十七页,共98页。class cj private: struct node *head; public: cj(); /1:构造函数构造函数,建立一个只有附加头结点的空链表建立一个只有附加头结点的空链表 input(); / 2:向链表中添加学生的信息向链表中添加学生的信息(在表的尾上追加在表的尾上追加) appen(node *p); /3.追加结点追加结点: 在链表尾上链上一个结点在链表尾上链上一个结点(p所指的所指的结点结点) void rf(char *f); /4.读文件,形成链表读文件,形成链表 node *post(int num); /5.定位定位: 提供学号提供学号, 返回指向返回指向(zh xin)该结点该结点的一个指针的一个指针) void lookup(int num); / 6.查询查询 提供学号提供学号, 查找学生并输出学生的信息查找学生并输出学生的信息 void Delete(int num); /7.删除删除: 提供学号提供学号, 删除学号是该值的学生删除学号是该值的学生 void modify(int num); /8.修改成绩修改成绩: 提供学号提供学号, 修改修改(重新输入重新输入)学生信学生信息息 void statistic() ; /9.统计函数统计函数,统计平均成绩统计平均成绩 void sort(cj &h); /10.排序排序(降序降序): 按平均成绩排序按平均成绩排序,形成排序的链表形成排序的链表h void Insert(cj &h,node *p); /在有序表在有序表h中结点后仍有序中结点后仍有序(排序的一个辅排序的一个辅助函数助函数: 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 ( ) const; /13(5) 计算链表的长度计算链表的长度;第47页/共98页第四十八页,共98页。第48页/共98页第四十九页,共98页。第49页/共98页第五十页,共98页。第50页/共98页第五十一页,共98页。第51页/共98页第五十二页,共98页。第52页/共98页第五十三页,共98页。第53页/共98页第五十四页,共98页。第54页/共98页第五十五页,共98页。第55页/共98页第五十六页,共98页。第56页/共98页第五十七页,共98页。第57页/共98页第五十八页,共98页。第58页/共98页第五十九页,共98页。第59页/共98页第六十页,共98页。第60页/共98页第六十一页,共98页。第61页/共98页第六十二页,共98页。第62页/共98页第六十三页,共98页。第63页/共98页第六十四页,共98页。第64页/共98页第六十五页,共98页。 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按任意键继续(jx)操作!endl;getchar();end:; cout谢谢您使用本系统!endl; 第65页/共98页第六十六页,共98页。第66页/共98页第六十七页,共98页。第67页/共98页第六十八页,共98页。例如:如下的问题例如:如下的问题 已知一个正三角形已知一个正三角形ABC,其内分点,其内分点A1、B1、C1,使得使得2AC1=C1B、2BA1=A1C、2CB1=B1A,连接,连接CC1、BB1、AA1,三条直线分别相交,三条直线分别相交(xingjio)于于A2、B2、C2(见图(见图1)。)。要求编写程序验证要求编写程序验证 : 三角形三角形A2B2C2面积是三角形面积是三角形 ABC面积的七分之一面积的七分之一. A C1 B2 B1 A2 C2 B A1 C 第68页/共98页第六十九页,共98页。运用运用(ynyng)逻辑思维分析程序设计:逻辑思维分析程序设计: 设正三角形设正三角形ABC的边长为的边长为a,则本题目,则本题目(tm)就是求两个三角形就是求两个三角形的面积,已知三角形的边长求面积,对于三角形的面积,已知三角形的边长求面积,对于三角形ABC是很容易的是很容易的,但对于三角形,但对于三角形A2B2C2的面积的求解却比较麻烦。的面积的求解却比较麻烦。(如何求呢如何求呢?)对于该问题的逻辑思维及其分析过程:对于该问题的逻辑思维及其分析过程:(1) 三角形三角形A2B2C2的面积的面积(2)求边长(求边长(A2B2、B2C2、C2A2)(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 分析分析实实现现第69页/共98页第七十页,共98页。第70页/共98页第七十一页,共98页。第71页/共98页第七十二页,共98页。(3)设计主函数:)设计主函数:调用(调用(2)中的函数,完成要)中的函数,完成要求的功能。求的功能。1、已知一个三角形、已知一个三角形t,求面积求面积mj;2、已知两顶点、已知两顶点a,b, 求内分点求内分点 (在这里两段的比值为在这里两段的比值为1:2);3、已知两顶点、已知两顶点p1,p2,求直线方程求直线方程line4、已知两直线、已知两直线l1,l2,求交点,求交点(jiodin)坐标坐标5、已知两点、已知两点P1,P2,求距离,求距离第72页/共98页第七十三页,共98页。三角形结构(三边三角形结构(三边(sn bin)形成三角形)(形成三角形)(a,b,c)struc T double a; double b; double c;直线直线(zhxin)方程结构方程结构:ax+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;或者或者第73页/共98页第七十四页,共98页。 第74页/共98页第七十五页,共98页。第75页/共98页第七十六页,共98页。第76页/共98页第七十七页,共98页。第77页/共98页第七十八页,共98页。第78页/共98页第七十九页,共98页。 A C1 B2 B1 A2 C2 B A1 C 第79页/共98页第八十页,共98页。第80页/共98页第八十一页,共98页。并调用有关并调用有关(yugun)的函的函数,完成要求的功能。数,完成要求的功能。注意:注意:每个类有什么数据成员每个类有什么数据成员(chngyun);每个类有什么成员每个类有什么成员(chngyun)函数,都函数,都具有什么功能?具有什么功能? 第81页/共98页第八十二页,共98页。 class P private: double x; double y; public: / 构造函数,用构造函数,用a,b提供值,形成点提供值,形成点 P(double a,double b); /构造函数,由两直线构造函数,由两直线a,b形成交点形成交点 P(line a,line b); /构造函数,由两顶点构造函数,由两顶点a,b,及比值,及比值r,求内分点求内分点 P(P a, P b,double r); /由两顶点,求两点间的距离由两顶点,求两点间的距离(jl) (使用友元)(使用友元) friend double d(P a, P b ); /显示顶点的值显示顶点的值 void show(); ;点类的定义点类的定义(dngy):点结构:点结构:(x,y)第82页/共98页第八十三页,共98页。第83页/共98页第八十四页,共98页。第84页/共98页第八十五页,共98页。第85页/共98页第八十六页,共98页。第86页/共98页第八十七页,共98页。第87页/共98页第八十八页,共98页。直线方程直线方程(fngchng)结构结构:ax+by+c=0class L double a; double b; double c;直线直线(zhxin)方程结构方程结构:y=kx+bclass L double k; double b;或者或者本题目中,使用,第二种格式本题目中,使用,第二种格式第88页/共98页第八十九页,共98页。第89页/共98页第九十页,共98页。第90页/共98页第九十一页,共98页。第91页/共98页第九十二页,共98页。第92页/共98页第九十三页,共98页。class T private: double a; double b; double c; public: /构造函数,由三参数构造函数,由三参数(cnsh),直接赋值;,直接赋值; T(double x,double y,double z); /显示三角形的信息;显示三角形的信息; void show(); /计算三角形面积计算三角形面积 double s();第93页/共98页第九十四页,共98页。第94页/共98页第九十五页,共98页。第95页/共98页第九十六页,共98页。第96页/共98页第九十七页,共98页。 A C1 B2 B1 A2 C2 B A1 C 第97页/共98页第九十八页,共98页。
展开阅读全文