C++大作业项目报告
C语言程序设计大作业报告模板样本
《C语言程序设计》大作业报告1.目掌握所学C语言程序设计办法,熟悉所学语言开发环境及调试过程,熟悉所学C语言中数据类型,数据构造、语句构造、运算办法,巩固和加深对理论课中知识理解,提高学生对所学知识综合运用能力。
通过综合设计规定达到下列基本技能:1.培养查阅参照资料、手册自学能力,通过独立思考进一步钻研问题,学会自己分析、解决问题。
2.通过对所选题目方案分析比较,确立方案,编制与调试程序,初步掌握程序设计办法,能纯熟调试程序。
2.作业内容纯熟掌握所学语言基本知识:数据类型(整形、实型、字符型、指针、数组、构造等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序构造(顺序构造、判断选取构造、循环构造);大程序功能分解办法(即函数使用)等。
进一步掌握各种函数应用等。
3.规定:1.规定每个同窗都要认真对待,积极参加。
2.独立完毕,不能抄袭。
3.课程设计结束时每位同窗必要完毕《大作业报告册》,其中包括设计源代码和设计思路。
4.不符合规定程序、设计报告、抄袭设计报告或源程序代码、在设计中完全未参加将作不及格解决。
5.统一格式,A4打印,准时提交。
4.题目:设计规定:编写一种程序,求3x4数组转置矩阵。
规定在main函数里面读数,在change函数里面把矩阵转置。
5.程序设计5.1 设计思路:1是先定义两个数组,一种是a[3][4],另一种是b[4][3]。
2是将随便输入12个数输入到a[3][4]。
3是在change函数中将a[3][4]中值通过for循环镶嵌将数组a[3][4]值赋值给数组b[4][3]。
4在主函数中将数组b[4][3]通过for循环嵌套输出。
5.2 代码# include <stdio.h>int change (int a[3][4],int b[4][3]);main(){ int a[3][4],b[4][3],i,j;printf("please input some 12 numbers:"); for(i=0;i<3;i++){printf("\n");for(j=0;j<=3;j++)scanf ("%d",&a[i][j]);}change (a,b);for(i=0;i<4;i++){for(j=0;j<3;j++)printf("%5d",b[i][j]);printf("\n");}}int change (int a[3][4],int b[4][3]){int m,n;for(m=0;m<3;m++)for(n=0;n<4;n++)b[n][m]=a[m][n]; retrun 0;}5.3 成果6.心得体会编写时注意for循环嵌套,先理清逻辑关系在编写,在看例题后,需要多敲代码,才干越来越纯熟。
c++大作业学生实验报告
学生实验报告实验课名称: C++程序设计实验项目名称:综合大作业——学生成绩管理系统专业名称:电子信息工程班级:学号:学生:同组成员:教师:2011 年 6 月 23 日题目:学生成绩管理系统一、实验目的:(1)对C++语法、基础知识进行综合的复习。
(2)对C++语法、基础知识和编程技巧进行综合运用,编写具有一定综合应用价值的稍大一些的程序。
培养学生分析和解决实际问题的能力,增强学生的自信心,提高学生学习专业课程的兴趣。
(3)熟悉掌握C++的语法和面向对象程序设计方法。
(4)培养学生的逻辑思维能力,编程能力和程序调试能力以及工程项目分析和管理能力。
二、设计任务与要求:(1)只能使用/C++语言,源程序要有适当的注释,使程序容易阅读。
(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)。
(3)要求划分功能模块,各个功能分别使用函数来完成。
三、系统需求分析:1.需求分析:为了解决学生成绩管理过程中的一些简单问题,方便对学生成绩的管理(录入,输出,查找,增加,删除,修改。
)系统功能分析:(1):学生成绩的基本信息:学号、、性别、C++成绩、数学成绩、英语成绩、总分。
(2):具有录入信息、输出信息、查找信息、增加信息、删除信息、修改信息、排序等功能。
2.系统功能模块(要求介绍各功能)(1)录入信息(Input):录入学生的信息。
(2)输出信息(Print):输出新录入的学生信息。
(3)查找信息(Find):查找已录入的学生信息。
(4)增加信息(Add):增加学生信息。
(5)删除信息(Remove):在查找到所要删除的学生成绩信息后进行删除并输出删除后其余信息。
(6)修改信息(Modify):在查到所要修改的学生信息后重新输入新的学生信息从而进行修改,然后输出修改后的所有信息。
(7)排序(Sort):按照学生学号进行排序。
3.模块功能框架图四、 系统设计与实现1. 菜单设计与实现:菜单将所有功能划入一个简单而又醒目的功能区,再通过分行及分列从而将各功能巧妙划分开来,方便操作,也会让人觉得界面简单别致而不单调。
c语言实验报告5篇
c语言实验报告c语言实验报告5篇随着社会一步步向前发展,我们使用报告的情况越来越多,我们在写报告的时候要注意涵盖报告的基本要素。
其实写报告并没有想象中那么难,以下是小编收集整理的c语言实验报告,欢迎阅读与收藏。
c语言实验报告1学号:__________ 姓名:__________ 班级:__________ 日期:__________指导教师:__________ 成绩:__________实验六综合实验一、实验目的1、掌握C语言中的变量、数组、函数、指针、结构体等主要知识点。
2、掌握C程序的结构化程序设计方法,能使用C语言开发简单的应用程序。
3、掌握C程序的运行、调试方法等。
二、实验内容编写一个学生信息排序程序。
要求:1、程序运行时可输入n个学生的信息和成绩(n预先定义)。
2、学生信息包括:学号、英文姓名、年龄;学生成绩包括:语文、数学、计算机。
3、给出一个排序选择列表,能够按照上述所列信息(学号、姓名、年龄、语文、数学、计算机)中的至少一个字段进行排序,并显示其结果。
1、使用函数方法定义各个模块。
三、实验步骤与过程物理实验报告·化学实验报告·生物实验报告·实验报告格式·实验报告模板四、程序调试记录c语言实验报告2第一章基础掌握1.1 实验目的掌握C程序设计编程环境Visual C++,掌握运行一个C程序的基本步骤,包括编辑、编译、链接和运行。
(]1.2 实验要求在报告中记录建立、保存C程序实习过程。
1.3 实验基本内容编写程序,在屏幕上显示一个短句“Hello World”(1)程序:1)编译如下程序:#includeVoid main(){printf (“Hello World! ”);}2)链接。
执行Build-命令。
3)运行。
执行Build Execute 命令。
显示结果。
4)关闭程序工作区。
(2)运行结果:输出结果:Hello World!总结:掌握C语言程序设计的基本框架,能够编写简单的程序。
c语言大实验报告
c语言大实验报告C 语言大实验报告一、实验目的本次 C 语言大实验的主要目的是通过实际的编程项目,深入巩固和应用 C 语言的基础知识,提高编程能力和解决实际问题的能力。
具体而言,包括熟练掌握数据类型、控制结构、函数、数组、指针等核心概念,并能够运用它们构建较为复杂的程序逻辑。
二、实验要求1、完成一个具有一定规模和功能的 C 语言程序,例如学生成绩管理系统、图书管理系统等。
2、程序应具备良好的代码结构和可读性,遵循编程规范。
3、实现数据的输入、处理和输出功能,能够进行数据的存储和查询。
4、对程序进行充分的测试,确保其稳定性和正确性。
三、实验环境1、操作系统:Windows 102、编程工具:Visual Studio 2019四、实验内容本次实验我选择开发一个学生成绩管理系统,该系统能够实现学生成绩的录入、查询、修改、删除以及成绩统计分析等功能。
(一)数据结构设计为了存储学生的信息,我定义了一个结构体`Student` ,包含学生的学号、姓名、各科成绩等字段:```ctypedef struct {int id;char name50;float score3; //假设存储三门课程的成绩} Student;```同时,使用一个动态数组来存储多个学生的信息:```cStudent students;int numStudents = 0; //记录学生数量```(二)功能模块实现1、成绩录入通过循环让用户输入学生的信息,包括学号、姓名和各科成绩,并将其添加到动态数组中:```cvoid inputStudent(){Student newStudent;printf("请输入学号:");scanf("%d",&newStudentid);printf("请输入姓名:");scanf("%s", newStudentname);printf("请输入三门课程的成绩:");for (int i = 0; i < 3; i++){scanf("%f",&newStudentscorei);}students =(Student )realloc(students, (numStudents + 1) sizeof(Student));studentsnumStudents++= newStudent;}```2、成绩查询根据用户输入的学号,在动态数组中查找对应的学生信息并输出:```cvoid queryStudent(){int id;printf("请输入要查询的学号:");scanf("%d",&id);for (int i = 0; i < numStudents; i++){if (studentsiid == id) {printf("学号:%d\n", studentsiid);printf("姓名:%s\n", studentsiname);printf("成绩:");for (int j = 0; j < 3; j++){printf("%2f ", studentsiscorej);}printf("\n");return;}printf("未找到该学号的学生信息!\n");}```3、成绩修改先查询要修改的学生信息,然后让用户输入修改后的成绩:```cvoid modifyStudent(){int id;printf("请输入要修改的学号:");scanf("%d",&id);for (int i = 0; i < numStudents; i++){if (studentsiid == id) {printf("请输入修改后的三门课程成绩:");for (int j = 0; j < 3; j++){scanf("%f",&studentsiscorej);printf("修改成功!\n");return;}}printf("未找到该学号的学生信息!\n");}```4、成绩删除根据学号删除指定的学生信息,并重新调整动态数组:```cvoid deleteStudent(){int id;printf("请输入要删除的学号:");scanf("%d",&id);int found = 0;for (int i = 0; i < numStudents; i++){if (studentsiid == id) {found = 1;for (int j = i; j < numStudents 1; j++){studentsj = studentsj + 1;}numStudents;students =(Student )realloc(students, numStudents sizeof(Student));printf("删除成功!\n");return;}}if (!found) {printf("未找到该学号的学生信息!\n");}}```5、成绩统计分析计算所有学生的平均成绩,并输出最高和最低成绩:```cvoid statistics(){float totalScore = 0;float maxScore = students0score0;float minScore = students0score0;for (int i = 0; i < numStudents; i++){float sum = 0;for (int j = 0; j < 3; j++){sum += studentsiscorej;}totalScore += sum / 3;if (sum / 3 > maxScore) {maxScore = sum / 3;}if (sum / 3 < minScore) {minScore = sum / 3;}}printf("平均成绩:%2f\n", totalScore / numStudents);printf("最高成绩:%2f\n", maxScore);printf("最低成绩:%2f\n", minScore);}```(三)主函数在主函数中,通过菜单的方式让用户选择要执行的操作:```cint main(){int choice;while (1) {printf("1、录入成绩\n");printf("2、查询成绩\n");printf("3、修改成绩\n");printf("4、删除成绩\n");printf("5、成绩统计分析\n");printf("6、退出\n");printf("请选择操作:");scanf("%d",&choice);switch (choice) {case 1:inputStudent();break;case 2:queryStudent();break;case 3:modifyStudent();break;case 4:deleteStudent();break;case 5:statistics();break;case 6:free(students);return 0;default:printf("无效的选择,请重新输入!\n");}}return 0;}```五、实验结果经过多次测试,本系统能够稳定运行,实现了预期的各项功能。
成绩管理系统-c语言综合训练大作业报告
《C 程序设计综合训练》课程设计报告题 目 成绩管理系统姓 名 专业班级 指导教师 分 院 信息科学与工程学院宁波理工学院1.题目与要求:1)问题提出本学期C程序设计综合训练的目标是设计一个简易学生成绩管理系统,主要用来管理学生的基本信息与成绩信息。
首先实际应用中的数据的个数据往往是不确定的,而c语言中的数组必须先说明其大小,大则浪费,小则出错,因此此程序中采用动态分配内存来建立链表。
其次实际应用中的数据往往需要保存下来,因此我们必须对数据进行文件的保存与读取,使之成为一个带有记忆化的程序。
2)本系统设计中主要的知识点菜单的使用,单链表的建立与操作(增删改查排),动态分配内存,文件的读写,程序的分模块化设计思想与多文件。
3)功能要求1)建立学生信息的链表,每个学生的信息包括:姓名,学号,成绩(语数英)。
2)对学生的成绩信息按照总分的高低进行排序。
3)根据学生的姓名来查找该学生并可修改该学生的任何一门成绩。
4)根据实际情况添加一条学生的信息。
5)根据实际情况删除一条学生的信息。
6)求出每个学生的总分和平均分。
7)根据总分的区间来筛选学生。
8)实现用文件来实时储存链表中的学生信息。
2.功能设计1)算法设计(1)利用switch语句设计如图所示的主菜单。
(2)选择1后,调用建链函数Creat,用户进行成绩数据的读入,在建立链表的同时并在文件里保存这些数据并计数。
(3)选择2后,调用打印函数Print对文件内容进行屏幕的打印。
(4)选择3后,调用排序函数Comp对链表中的成绩数据按照总分的高低进行排序,算法与冒泡算法类似,进行前后数据的两两比较,逆序则交换。
(5)选择4后,调用函数Add进行添加记录,可在总记录个数内在任意整正数的位置进行添加。
(6)选择5后,调用函数Delect进行删除记录,可在总记录个数在任意整正数的位置进行删除。
(7)选择6后,查改函数Find先进行对整个成绩信息的遍历,若找不到该同学,则返回,否则根据实际情况修改该同学的某一科的成绩。
C 大作业报告共12页word资料
C++大作业报告姓名:常皓学号:03101261班级:031013销售公司员工管理设计一个虚基类Staff(员工),包含编号、姓名和年龄保护数据成员以及相关的成员函数;由Staff派生出销售员类Salesman,包含销售额保护数据成员以及相关的成员函数;再由Staff派生出经理类Manager;然后由Salesman和Manager 类派生出销售经理类SalesManager。
设计一个利用文件处理方式实现对公司人员(包括销售员、经理和销售经理)进行管理,具有增加数据、更新数据、查询数据、删除数据以及重组文件的功能。
(删除数据在记录中做删除标志,重组文件指在物理上删除有删除标志的记录。
)另外要求分别统计这三类员工的人数以及所有员工的总数。
编程思想:首先定义一个虚基类Staff类,然后通过虚拟继承生成Salesman类和Manager类,最后由Salesman和Manager派生出主任销售员类SalesManager。
这四个类中定义InputFromFile(istream &in)这一输入函数,另外每个类还定义输入信息和输出信息的成员函数,之后定义StaffChart、SalesmanChart、ManagerChart和SalesManagerChart四个类来,为实现增加、更新、查询、删除以及全部显示人员的功能定义addItem、modifyItem、find、removeItem 以及display函数。
最后在主函数定义Staff_Chart、Salesman_Chart、Manager_Chart和Salesmanager_Chart四个对象,通过循环执行并用switch函数选择功能,然后调用相关的函数来实现各种功能。
实验代码:#include"iostream"#include"fstream"using namespace std;class Staffprotected:char num[10];char name[10];int age;public:Staff * Next;void set_staff()cout<<"请输入编号:";cin>>num;cout<<"请输入姓名:";cin>>name;cout<<"请输入年龄:";cin>>age;void InputFromFile(istream &in)in>>num>>name>>age;void show()cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"年龄:"<<age<<endl;char *get_num()return num;char *get_name()return name;int get_age()return age;class Salesman:virtual public Staffprotected:char major[10];char t_title[10];public:Salesman * Next;void set_salesman()cout<<"请输入编号:";cin>>num;cout<<"请输入姓名:";cin>>name;cout<<"请输入年龄:";cin>>age;cout<<"请输入专业:";cin>>major;cout<<"请输入职称:";cin>>t_title;void InputFromFile(istream &in)in>>num>>name>>age>>major>>t_title;void show_salesman()cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"年龄:"<<age<<endl;cout<<"专业:"<<major<<endl;cout<<"职称:"<<t_title<<endl;char *get_major()return major;char *get_t_title()return t_title;class Manager:virtual public Staffprotected:char job[10];char dept[10];public:Manager * Next;void set_manager()cout<<"请输入编号:";cin>>num;cout<<"请输入姓名:";cin>>name;cout<<"请输入年龄:";cin>>age;cout<<"请输入职务:";cin>>job;cout<<"请输入部门:";cin>>dept;void InputFromFile(istream &in)in>>num>>name>>age>>job>>dept;void show_manager()cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"年龄:"<<age<<endl;cout<<"职务:"<<job<<endl;cout<<"部门:"<<dept<<endl;char *get_job()return job;char *get_dept()return dept;class SalesManager:public Salesman,public Managerpublic:SalesManager * Next;void set_salesmanager()cout<<"请输入编号:";cin>>num;cout<<"请输入姓名:";cin>>name;cout<<"请输入年龄:";cin>>age;cout<<"请输入专业:";cin>>major;cout<<"请输入职称:";cin>>t_title;cout<<"请输入职务:";cin>>job;cout<<"请输入部门:";cin>>dept;void InputFromFile(istream &in)in>>num>>name>>age>>major>>t_title>>job>>dept;void show_salesmanager()cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"年龄:"<<age<<endl;cout<<"专业:"<<major<<endl;cout<<"职称:"<<t_title<<endl;cout<<"职务:"<<job<<endl;cout<<"部门:"<<dept<<endl;class StaffChartpublic:StaffChart();~StaffChart();void find(); //输出单个条目void save(); //将信息输出到文件void modifyItem(); //修改Staff条目void removeItem(); //删除Staff条目void display() //输出全部条目Staff *p=Head->Next;for(p;p!=End;p=p->Next)p->show();cout<<endl;void addItem() //添加条目End->set_staff();End->Next=new Staff;End=End->Next;save();private:Staff * Head,* End;ifstream in; //文件输入ofstream out; //文件输出Staff * findItem(char * num)for(Staff * p=Head;p->Next!=End;p=p->Next)if(!strcmp(p->Next->get_num() ,num))return p;return NULL;StaffChart::StaffChart() //构造函数Head=new Staff;Head->Next=new Staff;End=Head->Next;in.open("StaffChart.txt");while(!in.eof())End->InputFromFile(in);if(End->get_num()[0]=='\0')break;End->Next=new Staff;End=End->Next;in.close();StaffChart::~StaffChart() //析构函数for(Staff * temp;Head->Next!=End;)temp=Head->Next;Head->Next=Head->Next->Next;delete temp;delete Head,End;void StaffChart::find() //查找条目char num[10];Staff * p=NULL;cout<<"请输入要查找员工的工号:";cin>>num;if(p=findItem(num))p->Next->show();elsecout<<"没有找到!!"<<endl<<endl;void StaffChart::modifyItem() //修改条目char num[10];Staff * p=NULL;cout<<"请输入要修改员工的工号:";cin>>num;if(p=findItem(num))p->Next->show();cout<<"请输入新的内容:"<<endl;p->Next->set_staff();elsecout<<"没有找到!!"<<endl<<endl;save();void StaffChart::removeItem() //删除条目char num[10];Staff *p=NULL,*temp=NULL;cout<<"请输入要删除员工的工号:";cin>>num;if(p=findItem(num))temp=p->Next;p->Next=p->Next->Next;delete temp;cout<<"删除成功!!"<<endl<<endl;elsecout<<"没有找到!!"<<endl<<endl;save();void StaffChart::save() //保存out.open("StaffChart.txt");for(Staff * p=Head->Next;p!=End;p=p->Next)out<<p->get_num()<<" "<<p->get_name()<<" "<<p->get_age()<<endl;out.close();class SalesmanChartpublic:SalesmanChart();~SalesmanChart();void find(); //输出单个条目void save(); //将信息输出到文件void modifyItem(); //修改Salesman条目void removeItem(); //删除Salesman条目void display() //输出全部条目for(Salesman *p=Head->Next;p!=End;p=p->Next)p->show_salesman();void addItem() //添加条目End->set_salesman();End->Next=new Salesman;End=End->Next;save();private:Salesman * Head,* End;ifstream in; //文件输入ofstream out; //文件输出Salesman * findItem(char * num)for(Salesman * p=Head;p->Next!=End;p=p->Next)if(!strcmp(p->Next->get_num() ,num))return p;return NULL;SalesmanChart::SalesmanChart() //构造函数Head=new Salesman;Head->Next=new Salesman;End=Head->Next;in.open("SalesmanChaart.txt");while(!in.eof())End->InputFromFile(in);if(End->get_num()[0]=='\0')break;End->Next=new Salesman;End=End->Next;in.close();SalesmanChart::~SalesmanChart() //析构函数for(Salesman * temp;Head->Next!=End;)temp=Head->Next;Head->Next=Head->Next->Next;delete temp;delete Head,End;void SalesmanChart::find() //查找条目char num[10];Salesman * p=NULL;cout<<"请输入要查找销售员的工号:";cin>>num;if(p=findItem(num))p->Next->show_salesman();elsecout<<"没有找到!!"<<endl<<endl;void SalesmanChart::modifyItem() //修改条目char num[10];Salesman * p=NULL;cout<<"请输入要修改销售员的工号:";cin>>num;if(p=findItem(num))p->Next->show_salesman();cout<<"请输入新的内容:"<<endl;p->Next->set_salesman();elsecout<<"没有找到!!"<<endl<<endl;save();void SalesmanChart::removeItem() //删除条目char num[10];Salesman *p=NULL,*temp=NULL;cout<<"请输入要删除销售员的工号:";cin>>num;if(p=findItem(num))temp=p->Next;p->Next=p->Next->Next;delete temp;cout<<"删除成功!!"<<endl<<endl;elsecout<<"没有找到!!"<<endl<<endl;save();void SalesmanChart::save() //保存out.open("SalesmanChart.txt");for(Salesman * p=Head->Next;p!=End;p=p->Next)out<<p->get_num()<<p->get_name()<<p->get_age()<<p->get_major()<<p->get_t_title()<<endl;out.close();class ManagerChartpublic:ManagerChart();~ManagerChart();void find(); //输出单个条目void save(); //将信息输出到文件void modifyItem(); //修改Manager条目void removeItem(); //删除Manager条目void display() //输出全部条目Manager *p=Head->Next;for(p;p!=End;p=p->Next)p->show_manager();void addItem() //添加条目End->set_manager();End->Next=new Manager;End=End->Next;save();private:Manager * Head,* End;ifstream in; //文件输入ofstream out; //文件输出Manager * findItem(char * num)for(Manager * p=Head;p->Next!=End;p=p->Next)if(!strcmp(p->Next->get_num() ,num))return p;return NULL;ManagerChart::ManagerChart() //构造函数Head=new Manager;Head->Next=new Manager;End=Head->Next;in.open("ManagerChaart.txt");while(!in.eof())End->InputFromFile(in);if(End->get_num()[0]=='\0')break;End->Next=new Manager;End=End->Next;in.close();ManagerChart::~ManagerChart() //析构函数for(Manager * temp;Head->Next!=End;)temp=Head->Next;Head->Next=Head->Next->Next;delete temp;delete Head,End;void ManagerChart::find() //查找条目char num[10];Manager * p=NULL;cout<<"请输入要查找经理的工号:";cin>>num;if(p=findItem(num))p->Next->show_manager();elsecout<<"没有找到!!"<<endl<<endl;void ManagerChart::modifyItem() //修改条目char num[10];Manager * p=NULL;cout<<"请输入要修改经理的工号:";cin>>num;if(p=findItem(num))p->Next->show_manager();cout<<"请输入新的内容:"<<endl;p->Next->set_manager();elsecout<<"没有找到!!"<<endl<<endl;save();void ManagerChart::removeItem() //删除条目char num[10];Manager *p=NULL,*temp=NULL;cout<<"请输入要删除经理的工号:";cin>>num;if(p=findItem(num))temp=p->Next;p->Next=p->Next->Next;delete temp;cout<<"删除成功!!"<<endl<<endl;elsecout<<"没有找到!!"<<endl<<endl;save();void ManagerChart::save() //保存out.open("ManagerChart.txt");for(Manager * p=Head->Next;p!=End;p=p->Next)out<<p->get_num()<<p->get_name()<<p->get_age()<<p->get_job()<<p->get_dept()<<endl;out.close();class SalesManagerChartpublic:SalesManagerChart();~SalesManagerChart();void find(); //输出单个条目void save(); //将信息输出到文件void modifyItem(); //修改Manager条目void removeItem(); //删除Manager条目void display() //输出全部条目SalesManager *p=Head->Next;for(;p!=End;p=p->Next)p->show_salesmanager();void addItem() //添加条目End->set_salesmanager();End->Next=new SalesManager;End=End->Next;save();private:SalesManager * Head,* End;ifstream in; //文件输入ofstream out; //文件输出SalesManager * findItem(char * num)for(SalesManager * p=Head;p->Next!=End;p=p->Next)if(!strcmp(p->Next->get_num() ,num))return p;return NULL;SalesManagerChart::SalesManagerChart() //构造函数Head=new SalesManager;Head->Next=new SalesManager;End=Head->Next;in.open("SalesManagerChaart.txt");while(!in.eof())End->InputFromFile(in);if(End->get_num()[0]=='\0')break;End->Next=new SalesManager;End=End->Next;in.close();SalesManagerChart::~SalesManagerChart() //析构函数for(SalesManager * temp;Head->Next!=End;)temp=Head->Next;Head->Next=Head->Next->Next;delete temp;delete Head,End;void SalesManagerChart::find() //查找条目char num[10];SalesManager * p=NULL;cout<<"请输入要查找经理的工号:";cin>>num;if(p=findItem(num))p->Next->show_salesmanager();elsecout<<"没有找到!!"<<endl<<endl;void SalesManagerChart::modifyItem() //修改条目char num[10];SalesManager * p=NULL;cout<<"请输入要修改经理的工号:";cin>>num;if(p=findItem(num))p->Next->show_salesmanager();cout<<"请输入新的内容:"<<endl;p->Next->set_salesmanager();elsecout<<"没有找到!!"<<endl<<endl;save();void SalesManagerChart::removeItem() //删除条目char num[10];SalesManager *p=NULL,*temp=NULL;cout<<"请输入要删除经理的工号:";cin>>num;if(p=findItem(num))temp=p->Next;p->Next=p->Next->Next;delete temp;cout<<"删除成功!!"<<endl<<endl;elsecout<<"没有找到!!"<<endl<<endl;save();void SalesManagerChart::save() //保存out.open("SalesManagerChart.txt");for(Manager * p=Head->Next;p!=End;p=p->Next)out<<p->get_num()<<p->get_name()<<p->get_age()<<p->get_job()<<p->get_dept()<<endl;out.close();int main()int x,y;StaffChart Staff_Chart;SalesmanChart Salesman_Chart;ManagerChart Manager_Chart;SalesManagerChart SalesManager_Chart;bool quit=false;while(!quit)cout<<"选择功能:\n1.增加数据\t2.更新数据\t3.查询数据\t4.删除数据\t5.列出全部人员\t6.退出"<<endl;cin>>x;switch(x)case 1:cout<<"选择增加的类型:\n1.员工\t2.销售员\t3.经理\t4.销售经理"<<endl;cin>>y;switch(y)case 1:Staff_Chart.addItem();break;case 2:Salesman_Chart.addItem();break;case 3:Manager_Chart.addItem();break;case 4:SalesManager_Chart.addItem();break;default :cout<<"输入错误,程序终止!!"<<endl;exit(-1);break;case 2:cout<<"选择更新的类型:\n1.员工\t2.销售员\t3.经理\t4.销售经理"<<endl;cin>>y;switch(y)case 1:Staff_Chart.modifyItem();break;case 2:Salesman_Chart.modifyItem();break;case 3:Manager_Chart.modifyItem();break;case 4:SalesManager_Chart.modifyItem();break;default :cout<<"输入错误,程序终止!!"<<endl;exit(-1);break;case 3:cout<<"选择查询的类型:\n1.员工\t2.销售员\t3.经理\t4.销售经理"<<endl;cin>>y;switch(y)case 1:Staff_Chart.find();break;case 2:Salesman_Chart.find();break;case 3:Manager_Chart.find();break;case 4:SalesManager_Chart.find();break;default :cout<<"输入错误,程序终止!!"<<endl;exit(-1);;break;case 4:cout<<"选择删除的类型:\n1.员工\t2.销售员\t3.经理\t4.销售经理"<<endl;cin>>y;switch(y)case 1:Staff_Chart.removeItem();break;case 2:Salesman_Chart.removeItem();break;case 3:Manager_Chart.removeItem();break;case 4:SalesManager_Chart.removeItem();break;default :cout<<"输入错误,程序终止!!"<<endl;exit(-1);break;case 5:cout<<"选择列出人员的类型:\n1.员工\t2.销售员\t3.经理\t4.销售经理"<<endl;cin>>y;switch(y)case 1:Staff_Chart.display();break;case 2:Salesman_Chart.display();break;case 3:Manager_Chart.display();break;case 4:SalesManager_Chart.display();break;default :cout<<"输入错误,程序终止!!"<<endl;exit(-1);break;case 6:quit=true;break;default :cout<<"输入错误,程序终止!!"<<endl;exit(-1);return 0;运行结果:运行空间有四个文件:增加两个员工:修改一个销售员信息:查询一个销售员信息:列出全部员工:删除一个员工:再次列出员工:个人总结:经过多天努力终于完成了老师布置的大作业,但是效果上自己还是不太满意,有很多地方都想让它更佳完整,更符合自己心目中的那种管理系统,课后依然会继续修改,让它达到自己心中理想的完善的程序。
《面向对象程序设计(C++)大作业报告模板
《面向对象程序设计(C++)》课程大作业大作业名称年级专业项目成员指导教师2010 年6月1日目录1 需求分析 (1)1.1 开发背景 (1)1.2 项目目标 (1)1.3 运行环境 (1)2 程序分析 (1)2.1 技术要点 (1)2.2 项目任务书 (1)3 技术路线 (1)3.1 总体方案 (1)3.1.1 软件及开发平台 (1)3.1.2 总体方案 (1)3.2 详细设计 (2)4 工程进度 (2)5 测试报告 (2)5.1 阶段性测试 (2)5.2 总体测试 (2)6 个人小结 (2)参考文献 (2)附录程序源代码 (2)1 需求分析1.1 开发背景1.2 项目目标1.3 运行环境2 程序分析2.1 技术要点2.2 项目任务书3 技术路线3.1 总体方案3.1.1 软件及开发平台3.1.2 总体方案3.2 详细设计4 工程进度5 测试报告5.1 阶段性测试5.2 总体测试6 个人小结参考文献[1] 薛华成. 管理信息系统. 第二版. 北京: 清华大学出版社, 1993[2] R K 霍斯尼. 谷物科学与工艺学原理. 李庆龙译. 第2版. 北京: 中国食品出版社, 1989[3] 赵秀珍, 王崇文. 关于计算机学科中几个量和单位用法的建议. 见: 科技编辑学论文集.北京: 北京师范大学出版社, 1997. 125-129附录程序源代码正文文字采用宋体小四,行间距20磅。
正文所有的图表都必须在文中进行引用,图表中的字体用宋体五号,图标号在图的下方,表标号在表的上方,图标号与表标号均采用宋体五号。
图标号。
所有的图按章顺序编号,如第2章的第4个图的编号为“图2-4”,并将图的编号和名称标在图的下方(图中文字、图名称均为宋体五号字),如:图2-4 计算机与数据库表标号。
所有的表按章顺序编号,如第3章的第1个表的编号为“表3-1”,并将表的编号和名称标在表的上方(表中文字、表名称均为宋体五号字),如:所有的数字和字母都采用Times New Roman ,每段段首缩进两格。
C语言大作业报告
C语言大作业
猜数字游戏
信安三班
孙麒88
戈丽萍66
分工
戈丽萍:A、B、Win函数,流程图孙麒:main、Guess函数、程序调试
一、游戏说明
1、系统随机产生一组不重复的4位数字
2、游戏者输入所猜的不重复数字,并按回车提交。
3、系统将提交的数与它自动产生的数进行比较,输出结果“*A*B”形式。
其
中A代表数字正确相应位置也正确,B代表数字正确但位置不正确。
如:1A3B 表示游戏者有1个数字的位置正确且数值也正确,除此以外,游戏者还猜对了3个数字,但位置不对,即游戏者已经猜出4位数据,但有3个数据位置不对!
4、游戏者有限定的8次的猜测机会,在规定次数内完成,则游戏成功,否则,
游戏失败。
5、游戏成功后,将根据游戏者猜测所需要的次数对其进行评价:第一次猜出为perfect,第二——第四次猜出为great
二、详细流程
1、main函数
、
2、win函数(判断输赢)
3、A函数(判断数字且位置正确的个数)
A (char m[4],char n[4])
B(char m[4],char n[4],in a)
4、B函数(判断数字对但是位置不对的个数)
5、主函数Guess(char right[4])
三、总结经验
在确定了设计的内容之后,经历了很长时间的思考想出了算法。
但是在设计中反复出现错误,特别是B函数,检查很多遍之后觉得算法并无问题。
就分块进行调试。
后来偶然发现原来是整个过程中的“==”都写成了赋值“=”,导致错误,今后一定要细心才可以。
C++大作业项目报告--贪吃蛇游戏的MFC设计
“C++程序设计”课程大作业项目报告项目名称:贪吃蛇游戏的MFC设计姓名:XXX学号:XXX班级:XXX日期:2013.12.25小组概况目录1系统功能设计 (4)2系统总体结构 (4)3本人工作内容 (5)4项目总结 (6)5相关问题的说明 (6)1系统功能设计在一个密闭的空间内,通过按键上的四个光标控制蛇的上下左右四个方向移动,蛇头碰撞到食物则表示食物被蛇吃掉,这时蛇的身长长一节,接着出现食物,等待被蛇吃掉,如果蛇在移动过程中,蛇头撞到墙壁或者身体与蛇头接触则游戏结束。
2系统总体结构2.1设计思路说明在数据结构上,用数组存储蛇以及蛇的运动区域。
在数组中,每个元素有四个云感动方向,分别为RIGHT,LEFT,UP,DOWN.在没有蛇身的区域,数组的元素值为0。
在蛇身的每个节点,用一个数组元素存储当前蛇节点的运动方向。
通过改变数组中元素的值来表示蛇身的移动。
在程序中运用定时器来保证蛇的持续移动。
每个一定的时间间隔,蛇移动一格。
在设计界面时。
在Visual Studio 6.0的环境下,建立基于对话框的单文档工程,在工程下设计游戏界面,实现贪食蛇运行算法。
在对话框中画出一个矩形,实现封闭空间。
在大矩形中,用20x20的像素单位绘出蛇身,当蛇每移动一小格的时候,重绘整个窗口。
在对蛇身进行绘画时。
通过数组元素的值将蛇身在对话框的矩形中显示出来。
在蛇身运动时,首先在蛇头位置蛇身增长一个节点,然后判断蛇头是否到达食物所在位置,若在食物所在位置,则蛇尾不减一,蛇身继续移动,若蛇头不再食物位置,则蛇尾减一,蛇身继续移动。
若蛇头越界或者蛇头与蛇身重叠,则游戏结束,并弹出得分。
2.2重要的MFC1.CMenu:菜单2.CView:视图,负责内存数据与用户的交互。
包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。
最重要的是OnDraw(重画窗口),通常用CW nd::Invalidate()来启动它。
另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。
C程序课程设计(大作业)报告
5.查询职工完成的产品信息
(1)按职工号查询
(2)按名次查询
二、总体设计根据系统的要求,ຫໍສະໝຸດ 统总体设计如图1三、详细设计
1
#define N 100 //定义常数表示职工数
这次设计使我受益匪浅,在今后的学习中,我将以更加饱满的激情,更加积极的态度来面对程序设计这门课程,也要将这份激情延续到其它的课程中。
指导教师评语:
成绩:
填表时间:指导教师签名:
课程设计(大作业)报告
一、课程设计目的与要求
1.
(1)综合运用之前所学知识(选择控制,循环控制,数组,函数,指针,结构体和文件等)来完成一个简单的信息管理程序的设计。
2012年6月26日上午:按照先前完成的程序写一个对职工信息的查询,①按职工号查询;②按名次查询;
2012年6月27日上午~下午:调整程序,使程序更加美观,优化程序。还加入了一个将数据从磁盘读出的小函数,方便进行程序的操作和运行。
2012年6月28日上午:进一步理解程序,为答辩做准备。
剩余的时间对程序进行修改和撰写程序实验报告。并且通过总体设计和详细设计将程序分解开,并进行详细说明。
5.查询职工完成的产品信息。
(1)按职工号查询
2)按名次查询
工作计划及安排:
由于我们设计的题目是:职工工作量统计系统设计所以我们对我们的课程有以下安排:
2012年6月25日上午:我们先分析了我们课程需要的要求,对题目所要求的作出一个安排,对设计所要求的做出一个全面的规划,选定我们所要用的数据和函数,在计算机上操作先写出我们所需要的头文件,然后在写出我们的菜单方式的格式;
大一C语言课题报告总结(5篇)
大一C语言课题报告总结(5篇)在本学期学习C语言将近一个学期后,我们进展了C语言实训,做了一个比拟简单、功能较全的学籍治理系统。
虽然实训为期不长,但对我C 语言水平的提高和对C的熟悉理解有很大帮忙。
在这次实训中,我对C语言有了一个更深的了解熟悉,也使我这个学期学的学问得到了稳固。
虽然在实训中遇到了很多的困难,比方说一开头在文件方面的学问比拟薄弱,在对输入的数据保存、已输入条数的统计方面做得缺乏。
但经过自己对文件内容的学习和向他人的请教,在这方面的学问得到补充,问题也得到了解决。
在这次实训中,当自己每次解决一个问题时,当自己经过屡次调试、修改使程序得以运行时,自己心中那份自信、满意、满意感油然而生。
经过这次实训,使我加强了对C语言的兴趣。
同时在这次实训中,也使我发觉了很多的问题。
在实训中,我熟悉到自己还有许多的学问没学好,根底学问没理清,而且很多东西还要去翻书,去上网搜寻。
而且遇到一些小错误运行不出来,就会烦躁担心,觉得有些自暴自弃,以后要克制,尽量保持一颗良好的心态,学好C语言,也学好用C语言编写一个按要求的系统。
同时这次实训也使我更加深化了C语言学习方法。
算法是程序的灵魂,在我们每遇到一个比拟简单的编程问题时,我们应当先写出该问题解决的算法,然后再去实现编代码。
做到了这样,问题才能更快地解决。
软件开发少不了合作,只有合作才能共同提高,只有互补才能取长补短,共同进步。
通过这次实训,我也熟悉到自己有很多的方面需要改良和有待提高。
对于以后,我会从以下几方面连续努力:1、加强对算法的学习,到达精通一些根本算法的水平。
2、编程多加强实践,多上机学习。
3、打好根底,扎实功底,注意根底理论学习,不好高骛远。
4、加强和同学的合作,遇到问题多争论,多查找解决问题的方法,总之,这一切将对我C语言的学习有很大帮忙。
大一C语言课题报告总结二在初学C语言的一个学期后,我们进展了C语言实训阶段,尝试编写一个比拟简单的程序系统。
C++大作业需求分析报告
C++大作业需求分析报告C++选题及需求分析报告----图书馆多功能系统选题背景:随着社会信息量的与日俱增,我们利用图书馆的机会越来越多。
图书馆拥有丰富的图书资源和电子资源,它正越来越广的在我们日常生活中得到应用,我们知道,图书馆的读者众多,图书流量比较大,若只靠人工进行管理不仅费时费力,而且容易出错,开发一个既可以针对管理者,又可针对读者的图书馆多功能系统可以充分减少工作人员的工作量,准确有效的对图书信息和读者信息进行管理。
功能设计:图书馆多功能管理系统分为两个模块:1.管理员,2.读者,下面将从这两个模块分别进行功能设计。
一、管理员1.功能简介:(1)实现对新进图书的基本信息(书名,作者,索书号,数量)的录入(2)图书基本(借阅状况,状态,库存)信息的查询(3)对已有图书信息进行修改(4)对已丢失或者撤销的图书的删除(5)为借书人办理注册,管理读者基本信息(6)对不诚实的用户添加到黑名单(7)管理读者的借书日期,借书时间,罚款等信息(8)发布新书公告(9) 找出借阅次数最多的10本书,并对它们进行排序。
(10)统计借阅书籍最多的前5名读者(11)图书采购信息:书名、作者、采购日期、采购数量、采购单价、采购金额、发票号码、图书编号等2.界面设计通过对话框进行交互管理(后期可考虑使用图形界面),主要有以下操作1.查询:a.图书信息b.读者信息2.新建:a图书b读者3.管理:a图书修改b读者信息修改c创建黑名单4.删除:a图书b读者5.帮助信息:主要提供系统的使用帮助一、读者1.功能简介:(1)新用户的自助注册,登录(2)借阅历史(3)已借图书信息(4)罚款清单(5)查找图书(可通过作者,索书号,关键字,书名,文献号)(6)预约图书功能(7)图书馆新书公告(8)续借图书功能2.界面设计通过对话框进行交互管理(后期可考虑使用图形界面),主要有以下操作1.注册:注册自己的姓名,邮箱,电话号码等信息2.登录:利用设定的密码进行登录3.修改个人信息:修改自己的各种信息4.查看历史记录:查看历史图书借阅记录5.查找图书:查找自己想要查找的图书6.借阅图书:借阅找到的图书7.预约图书:事先预约图书8.查看罚款清单:查看历史罚款清单9.查看新书公告:关注新书信息10.自助还书:自助还书11.帮助信息:对系统的使用帮助。
c++实验-大作业-简单类的定义与实现(实验报告)
实验内容、方法、过程: 实验内容、方法、过程: 实验内容: 学校招生办在录取当年新生时已为每个新生建立了一个新生基础类 Base,其中包含 有每位新生的基本资料:学号(long num) 、姓名(char name[20]) 、性别(int sex:其中 0 表示男,1 表示女) 、年龄(int age) 、住址(char addr[30]) 、主修专业(char mdept[30]) 。 新生主修专业所在系又在学生基本资料的基础上为每位该系新生建立一个主修类 First,其中除了包含原来新生资料外,还设有新生主修成绩(float Mscore[60])。 为了促进复合型人才培养,学生在二年级可辅修另外一个专业课程。辅修接收系又为每 位辅修本系第二学位同学建立一个辅修类 Fbase, 其中除了学生基本资料外, 还设有辅修 专业名称(char fdep[30]) 、辅修成绩表(设为 float Fscore[4]) 。 现假设: 招生办工作人员只能访问到学生基本资料; 主修系教务员只能访问到学生的基本资料和主修相关资料(但不能修改学生的基本 资料) ; 辅修系接收教务员只能访问(但不能修改)学生的基本资料和辅修相关资料; 设某系现有 6 名学生,其中有 4 名辅修了某系课程。期末考试时,主修系共考了 5 门课,辅修共考了 4 门课,设成绩均用百分制(int)表示。考完试后,进行下列工作: 1)主修系教务员输入每位同学成绩; 2)辅修系接收教务员输入每位辅修同学成绩; 输入结束后: 3)主修系教务员统计出期末考中至少有 3 门(含 3 门)以上课程成绩在 85 分(含 85 分)以上、其余课程成绩不低于 70 分的同学并显示出其相关资料; 4)主修系教务员还要统计出需要参加补考的同学及其相关资料; 5)辅修接收系教务员要统计出需要参加补考的辅修同学并显示出其相关资料; 实验要求: 1) 请按照以上的条件给出新生基础类的定义与说明。 2) 给出三个不同教师角色的定义与说明。 3) 在前面实验的基础上,利用类与继承设计并实现出满足上述要求的类。 4) 编出一个模拟程序模拟招生办工作人员、主修系教务员、辅修接收系教务员的 操作且实现其工作要求。 主要程序: #include<iostream> using namespace std; class Base { private: long num; char name[20]; int sex; int age; char addr[30]; char mdept[30]; public: void set_Base(long number,char *p_name,int the_sex,int the_age,char *p_addr,char
C语言大作业报告范文
学院XX学院目录1 摘要 (3)1.1设计题目 (3)1.2设计内容 (3)1.3开发工具 (3)1.4应用平台 (3)2 详细设计 (4)2.1程序结构 (4)2.2主要功能 ................................................... 错误!未定义书签。
2.3函数实现 (6)2.4开发日志 (6)3 程序调试及运行 (7)3.1程序运行结果 (7)3.2程序使用说明 (8)3.3程序开发总结 (8)4 附件源程序 (8)1 摘要1.1 设计题目A求最大数;B高次方数的尾数1.2 设计内容A求555555的约数中最大的三位数; B求13的13次方的最后三位数1.3 开发工具Visual C++ 6.0和Win32..1.4 应用平台Windows XP 32位2 详细设计2.1 程序结构A求最大数定义变量a、b、c;a从100至999递增;b为555555;用b除以a;判断是否可以整除;若可以;则把a的值赋给c;a自加1;若不可;a自加1..重复以上步骤;直到a>999;输出c..循环语句采用for循环..B高次方数的尾数定义变量i、j;i从1至13递增;j初值为1..用j乘以13;用得到的乘积除以1000并取其余数;赋给j;i自加1..重复以上步骤;直到i>13;输出j..循环语句采用for循环..2.2 主要功能程序功能:A求555555的约数中最大的三位数; B求13的13次方的最后三位数..原理和方法:A题目的原理和方法:因为要求的是三位数;就用555555从小到大依次除以100到999的所有数;并判断能否整除;最后一个可以整除555555的数即为所求..循环语句采用for循环..B题目的原理和方法:乘积的最后三位数只与乘数和被乘数的后三位数有关;因此用1乘以13;再除以1000并取余数;用余数乘以13;再除以1000并取余数;依次进行下去;累乘13个13后除以1000取得的余数即为所求..循环语句采用for循环..2.3 函数实现A求最大数int a;b=555555;c; /*定义变量;赋初值*/fora=100;a<=999;a++ /*FOR循环*/{ifb%a==0 /*利用IF语句判断b是否可以被a整除*/c=a; /*将555555的约数赋给c*/}printf"%d\n";c; /*输出c*/B高次方数的尾数int i;j=1; /*定义变量;赋初值*/fori=1;i<=13;i++ /*FOR循环*/{j=j*13%1000; /*将j乘以13的乘积的后三位数赋给j*/}printf"%d\n";j; /*输出j*/2.4 开发日志A选定这个题目后;我先分析此题用何种算法完成;确定了使用FOR循环并限定除数范围;然后画出程序框图;再一步步编写源代码..调试过程很顺利;只有一个地方忘加了“;”..运行程序后;结果非常满意..B这个题目不难;但是也不简便;我想到只取三位数的方法;并使用FOR循环;然后画出程序框图;再一步步编写源代码..调试过程发现对其中一个变量的初值是1还是13有待解决;分析程序后发现应该用1;然后进一步调试;运行;直至结果正确..3 程序调试及运行3.1 程序运行结果A求最大数求得555555的约数中最大的三位数是777 B高次方数的尾数求得13的13次方的最后三位数是2533.2 程序使用说明A打开源程序;编译;连接;然后运行即可得到求得555555的约数中最大的三位数是777B打开源程序;编译;连接;然后运行即可得到13的13次方的最后三位数是2533.3 程序开发总结首先;程序开发需要耐心;从算法设计到源代码编写要一步步耐心完成..程序开发需要细心;特别是程序调试过程中;细心可以更迅速地发现错误;节省时间..最后;程序开发需要创新;创新的思路;创新的算法可以简化程序;也是程序编写更加快捷..4 附件源程序A求最大数.C工程名称:求最大数#include<stdio.h>int main{int a;b=555555;c;fora=100;a<=999;a++{ifb%a==0c=a;}printf"%d\n";c;return 0;}B高次方数的尾数.C工程名称:高次方数的尾数#include<stdio.h>int main{int i;j=1;fori=1;i<=13;i++{j=j*13%1000;}printf"%d\n";j;return 0;}。
C语言大作业报告书
C语言大作业报告书一、目的1)巩固练习C语言的基础知识2)综合运用C语言的编程方法3)针对抽象的解题思路,设计程序结构4)基于VC6调试、测试与修改程序二、内容2.1、阅读程序,推导结果。
1、#include<iostream>using namespace std;int a = 200;int main(){int s=0;for(int i=1; i<=5; i++)s+=++a;cout<<s<<endl;return 0;}运行结果:10152、#include<iostream>using namespace std;int a[3][3]={{1},{2},{3}};int b[3][3]={1,2,3};void main(){cout<<a[0][1] + b[1][0] << ' ';cout<<a[1][0] + b[0][1] << endl;}运行结果:0 43、#include<iostream>using namespace std;void main(){int num=0,i=10;do{i--;num+=i;}while(--i);cout<<num<<endl;}运行结果:252.2、应用编程1、由键盘输入5个整数,输出其中最大、最小的数与它们的平均值。
提示:设置2个指示变量,分别记录最大、最小的数的下标;指示变量先设置为0,然后遍历数组,刷新指示。
解:#include <iostream>void main(){int a[5],i,s=0;float arry;for(i=0;i<5;i++)cin>>a[i];for(i=0;i<5;i++){for(int j=i+1;j<5;j++){if(a[i]>a[j]){int t=a[j];a[j]=a[i];a[i]=t;}}}cout<<"最小数="<<a[0]<<endl;cout<<"最大数="<<a[4]<<endl;for(i=0;i<5;i++){s=s+a[i];}arry=s/5;cout<<"平均值="<<arry<<endl;}输入:3 4 5 7 16输出:最小数=3最大数=16平均值=72、输出以下图案。
C++课程大作业参考报告材料
目录目录 (I)第一章需求分析 (2)1.1 问题描述 (2)1.2 功能需求 (2)1.3 开发环境 (2)1.4 开发过程 (2)第二章概要设计 (3)2.1 总体设计 (3)2.2 航空类的定义 (3)2.3 接口设计 (5)2.4 运行界面设计 (5)第三章详细设计 (6)3.1 输入模块设计 (6)3.2 查找模块设计 (7)3.3 订票模块设计 (8)3.4 退票模块的设计 (9)3.5 保存及读取模块设计 (10)第四章测试分析 (11)4.1 测试程序执行情况 (11)第五章用户手册(可选) (15)5.1 使用说明 (15)第六章课程设计总结 (15)附录:程序代码 (17)参考文献 (25)第一章需求分析1.1问题描述飞机订票系统设计假定民航机场共有n个航班,每个航班有一航班号、确定的航线(起始站、终点站)、确定的飞行时间(星期几)和一定的成员订额。
试设计一民航订票系统,使之能提供下列服务:❖航班信息录入功能(航班信息用文件保存)--输入❖航班信息浏览功能--输出❖查询航线:(至少两种查询方式)--算法●按航班号查询●按终点站查询❖承办订票和退票业务1.2功能需求根据要求用户需要设计一个关于售票处服务系统程序,使航空公司可以通过的乘客简单地输入个人部分信息,便可方便的管理机票。
该程序还要实现以下功能:(1)能够对航空航线进行查询;(2)能够自主的承办订票业务(3)能够自主的承办退票业务1.3开发环境应用VisualC++,VisualC++不仅仅是一个C++编译器,而且是一个基于Windows操作系统的是集成开发环境IDE,这种环境开发出来的软件稳定性好、可移植性强,可以编制各种的Windows应用程序。
1.4开发过程第一天选择课程设计题目,分析课题的要求第二天编程第三天编程及调试第四天写课程设计报告第五天提交课程设计报告(打印稿及电子稿)第二章概要设计2.1 总体设计根据需求分析,由于程序较为简单我们将只设计一个类:plane(即航班类)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++大作业项目报告——AGV 路径规划与运行仿真软件设计小组成员:日期:2015年6月16日指导老师:目录C++大作业项目报告 (1)——AGV 路径规划与运行仿真软件设计 (1)一、课题背景 (3)1.1案例背景 (3)1.2问题描述 (3)1.3任务目标 (3)1.4具体分析 (3)二、系统设计 (4)2.1类体系设计 (4)2.2类定义及函数描述 (4)2.3程序流程图 (5)三、程序重点解析 (7)3.1文本文档读入地图信息 (7)3.2 Dijkstra 算法程序设计 (8)3.3动态显示部分 (9)四、程序运行结果展示 (10)4.1地图文件 (10)4.2运行窗口 (10)4.3动态显示窗口 (11)4.5改变地图,改变AGV参数运行。
(12)五、程序设计小结 (14)5.1程序设计的缺陷和不足 (14)5.2设计中遇到的困难 (14)六、参考资料 (15)七、源程序及相关文件 (15)八、各小组成员个人报告 (15)一、课题背景1.1案例背景AGV(自动导引车)由于运动灵活,被广泛用于生产车间物料的搬运。
由于单机搬运能力有限,实践中经常需要由多台AGV 同时进行搬运。
由于AGV 一般无法感知全局信息,为避免多AGV 发生碰撞并提高AGV 搬运效率,多台AGV 需要与上位机调度系统进行通信并依据调度指令运行。
1.2问题描述在已知AGV运行的地图以及AGV运行速度前提下,采用C++编写单台AGV路径规划的最短路径算法,并动态显示AGV 的运行。
1.3任务目标针对AGV 搬运调度需求开发一套AGV 路径规划与运行监控仿真软件,合理规划单台AGV 运行路径并动态显示运行轨迹。
1.4具体分析由以上介绍可知,AGV在工业生产中有着很广泛的应用,对AGV导引程序的研究是有着很强实际意义的。
要完成一个完整的AGV路径规划程序,就要考虑地图,AGV,和路径三个方面的问题。
而其中,路径又是最为重要的。
本程序要求仿真显示,所以显示部分也是重点。
若制作多台AGV的路径规划程序,还应当考虑到路径的重叠,以避免碰撞产生。
二、系统设计2.1类体系设计包含了两个基类CFixedMap和CAGV,一个单一继承的派生类CPathPlan和一个多重派生类CAGVShow。
2.2类定义及函数描述各个类的成员以及成员函数的作用如注解所示。
(1).基类:CFixedMapclass CFixedMap{struct Coordinate{int x;int y;int num;};//记录点的结构体struct combp{int x1,y1;int x2,y2;};//连通点坐标struct Combname{int num1;int num2;};//连通点名public:int mVexNum; // 顶点数int mEdgNum; // 边数double mMatrix[MAX][MAX]; // 邻接矩阵Combname comb[MAX]; //连通点名combp cp[MAX]; //连通点坐标Coordinate mVexs[MAX]; // 顶点集合int getx(int n1);int gety(int n2);void Input();//以文件方式输入地图信息void ShowMap();//easyx显示地图};(2).基类CAGVclass CAGV{int speed; //AGV速度int width; //AGV宽度int length; //AGV长度public:CAGV();int getl(); //返回AGV长度int getw(); //返回AGV宽度int gets(); //返回AGV速度};(3).单一继承类CPathPlanclass CPathPlan:public CFixedMap{public:int path[MAX]; //存放最后一个点double dist[MAX]; //存放路径距离int v0; //起始点int route[40]; //路径int rnum; //路径顶点数Coordinate rpoints[MAX];//路径点集void MaptoGraph();void Dijstra();void Putpath();};(4).多重继承类CAGVShowclass CAGVShow:public CPathPlan,public CAGV{public:#define k (abs(y2-y1))/(abs(x1-x2))int a,b,c,d;int x1,x2,y1,y2; //AGV实际坐标int i,j;int l,w,s; //对应类CAGV中的相关数据void show();};2.3程序流程图开始AGV 信息设定自动设置AGV ?是自动载入地图? 手动输入AGV 信息手动输入地图文件名载入地图文件(文本)多次演示?否显示地图路径文件输出路径规划动态显示动态显示显示地图路径规划路径文件输出结束?结束是否是 否是否三、程序重点解析3.1文本文档读入地图信息在最初的设计中,为了方便调试与信息录入,地图文本做的粗糙不堪,但这确实为程序编写提供了许多便利。
如图,优化前的地图文件:可以看出,全都是由数字组成,如果不了解程序,就不知道文件包含了什么,应该怎样修改。
在优化时,加入了大量提示信息,由此也出现了问题。
由于文件流输入无法判断输入的信息类型,造成了将提示信息录入而无法得到正确信息的错误。
为解决这一问题,我们使用了一个简单的手段,即将提示信息与地图信息分隔,并分别录入,然后不再处理提示信息。
改进后的地图文本如下:程序中的相应代码://以文件方式输入地图信息void CFixedMap::Input(){int panju;char fname[10]={"map2.txt"};cout<<"是否载入默认地图?(1:是,2:否)";cin>>panju;if(panju==2){cout<<"请输入地图信息文件名:";cin>>fname;}ifstream file(fname);char use1[100];char use2[100];char use3[100];char use4[100]; //use数组用来储存提示信息。
file>>use1;file>>mVexNum; //端点个数file>>use2;file>>mEdgNum; //边数file>>use3;for(int i=0;i<mVexNum;i++) //输入所有点的信息{file>>mVexs[i].num>>mVexs[i].x>>mVexs[i].y;}file>>use4;for(i=0;i<mEdgNum;i++) //输入连通点编号{file>>comb[i].num1>>comb[i].num2;}file.close();}3.2 Dijkstra 算法程序设计Dijkstra 算法主要就是查找和更新,开始时想过用指针来做,后来由于跟地图的输入结合要用到input函数里的变量,于是就采用了用数组来储存距离和路径。
在Diikstra算法中首先是初始化源点数组,然后就是查找其他到源点距离最近的点,然后就是将该点并入源点集,再就是更新,以上次并入的点为起点开始查找,直到遍历所有点。
刷新每次查找后的最短距离并保存。
代码如下:void Dijstra(){cout<<"输入起点:";cin>>v0;v0--;int s[MAX];int v;int i;int j;int w;double min;for(v=0;v<mVexNum;v++) //初始化S,dist,path{s[v]=0; //0表示未求出最短路径dist[v]=mMatrix[v0][v]; //开始时假定为最短路径if(dist[v]<maxD && v!=v0)path[v]=v0; //直达情况else path[v]=-1; //无直达路径}dist[v0]=0; //初始时v0属于s集,v0到v0路径最短s[v0]=1;for(i=1;i<mVexNum;i++) //假设由一个中转点到达会近些,验证。
再假设由两个中转点到达会近些,验证。
穷举{min=maxD;for(w=0;w<mVexNum;w++) //找一个最近到的点,下标装入vif(s[w]==0 && dist[w]<min) //点w不属于s集且离v0更近{v=w; //经点w中转min=dist[w];}s[v]=1; //将v并入S,由v0到达v点最短距离为min,假设由v0到v再由v到其余各点,更新当前最后一个点及距离for(j=0;j<mVexNum;j++)if(s[j]==0 && (min+mMatrix[v][j]<dist[j])) //如果多经过一个点v到点j的距离更短,更新{dist[j]=min+mMatrix[v][j];path[j]=v; //点的序号}}}3.3动态显示部分问题主要是集中在用easyx画图上,从直线到斜线到反向直线和任意一个线段,全部用循环和间歇控制,主要工作就是每隔一个间隔绘制一定的图像使得间隔连起来的一个整体是一个顺畅的连贯的运行图。
说起来简单可实践起来哪怕是循环中画图和清空的顺序不对,显示的都会是一个完全不像样的运行线路,所以整个程序部分对逻辑的要求比较严格,每个细节都要重复重复地检查和试运行才能达到不出错的地步。
寻找错误几乎成了整个程序设计的主要工作,不过也是在告诉我们,编好程序不一定要多么高级,而是少犯错。
程序代码过多,参见cpp文件。
四、程序运行结果展示4.1地图文件4.2运行窗口4.3动态显示窗口4.4.fops.txt路径输出4.5改变地图,改变AGV参数运行。
(1).地图文件(2).运行窗口,动态显示,fops路径文件输出。
五、程序设计小结5.1程序设计的缺陷和不足(1)地图输入的方式虽然采用了文件流,但是实用价值仍然不高,负责输入的组员曾经考虑过使用图片载入,但查阅相关资料后因为难度较大而放弃。
(2)算法的革新未能实现,直接使用了比较简单和落后的Dijkstra 算法,程序的处理能力并不强。
(3)多台AGV运行未能实现。