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函数,检查很多遍之后觉得算法并无问题。
就分块进行调试。
后来偶然发现原来是整个过程中的“==”都写成了赋值“=”,导致错误,今后一定要细心才可以。
- 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运行未能实现。