C++实验报告,怎么做?

C++实验报告,怎么做?,第1张

c(c++)上机实验报告格式:

⒈  实验目的  

(1) 了解在具体的语言环境下如何编辑、编译、连接和运行一个 C 程序。

⑵ 通过运行简单的 C 程序,初步了解 C 源程序的特点。

⑶ 掌握 C 语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。

⑷ 掌握不同的类型数据之间赋值的规律。

⑸ 学会使用 C 的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。

2.实验内容和步骤

⑴  检查所用的计算机系统是否已安装了 C 编译系统并确定他所在的子目录。

⑵ 进入所用的集成环境。

⑶ 熟悉集成环境的界面和有关菜单的使用方法。

⑷ 输入并运行一个简单的、正确的程序。

⒊ 实验题目

⑴ 输入下面的程序

# include “stdio.h” void main()

{ printf(“This is a c program.\n”)}

程序无误,其运行的结果为:

#include<iostream>

#include<string>

#include <fstream>

#include<sstream>

#include<iomanip>

#include <stdlib.h>

using namespace std

//结点类,用于存放学生的各种数据

class Node{

public:

int id

//学号

string name

//姓名

string grade

//等级

double english

//英语

double math

//数学

double c

//C++

double sum

//总分

double average

Node *next

//指向下一结点的指针

Node(int nid=0,string nname="noname",

//构造函数,初始化变量

double e=0,double m=0,double cl=0,double s=0 ,double a=0,string g="ng")

}

Node::Node(int nid,string nname,double e,double m,double cl,double s,double a,string g)

{

id=nid

name=nname

next=NULL

english=e

math=mc=cl

sum=s

average=a

grade=g

}

//class NOde结束//Link类,把数据以链表的形式存储,链表的每个结点为一个Node对象

class Link{

private:

Node *head

//链表的头指针,为Node对象类型的指

public :

Link()//构造函数,初始化变量

bool linkIsEmpty()//判断链表是否为空

void linkInsert(Node *newnode)//向链表中插入新的结点

bool linkDelete(int nid)//从链表中删除的结点

void linkClear()//清空链表中数据

void linkView()//查看链表中数据

void linkGrade(Node *p1)//计算等级

void linkAverageTotle()//按平均分统计

Node* linkFind(int nid)//在链表中查找id为nid结点,返回指向该结点的指针

Node* getHead()//获取头指针

}

Link::Link()

{ //构造函数,初始化链表为空

head=NULL

}

bool Link::linkIsEmpty()

{ //判断链表是否为空,空则返回

truereturn(head==NULL)

}

void Link::linkInsert(Node *newnode)

{//按id值从小到大的顺序,插入新的结点

Node *p1if(!head)//链表为空的情况

head=newnodeelse if((head->id)>(newnode->id))

{//插入到第一个结点的情况

newnode->next=head

head=newnode

}

else

{//插入到第二个及以后情况

p1=head

while(1)

{if(!(p1->next))

{p1->next=newnodebreak}

else if((p1->next)->id>newnode->id)

{newnode->next=p1->nextp1->next=newnodebreak}

p1=p1->next}

}

}

bool

Link::linkDelete(int nid)

{//删除结点,成功则返回

trueNode *p

if(head==NULL)

//链表为空的情况

return false

if(head->id==nid)

{//删除的为第一个结点的情况

head=head->next

return true

}p=head

while(p->next)

{//删除的为第二个及以后结点的情况

if((p->next)->id==nid)

{p->next=(p->next)->next

return true

}

p=p->next

}

return false

}

void Link::linkClear()

{//清空链表

head=NULL

}

void Link::linkView()

{//显示链表数据

Node *p=head

cout<<setw(10)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"英语"<<setw(8)<<"数学"<<setw(8)<<"C++"<<setw(8)<<"总分"<<setw(8)<<"平均分"<<setw(8)<<"等级"<<endlwhile(p){ (p->sum)=(p->english)+(p->math)+(p->c)

//计算总分

(p->average)=((p->english)+(p->math)+(p->c))/3

//计算平均成绩

linkGrade(p)

//计算等级

cout<<setw(10)<<p->id<<setw(8)<<p->name<<setw(8)<<p->english<<setw(8)<<p->math<<setw(8)<<p->c<<setw(8)<<p->sum<<setw(8)<<p->average<<setw(8)<<p->grade<<endlp=p->next}}void Link::linkGrade(Node *p1)

{

// 计算等级

while(p1){

if(p1->average>=90&&p1->average<=100)

p1->grade="优"

else if(p1->average>=80&&p1->average<90)

p1->grade="良好"

else if(p1->average>=70&&p1->average<80)

p1->grade="中等"

else if(p1->average>=60&&p1->average<=70)

p1->grade="合格"

else

p1->grade="不合格"p1=p1->next

}

}

void Link::linkAverageTotle()

{//按学生平均分统计

int a=0,b=0,c=0,d=0,e=0,f=0

double averagesum=0,asum=0,aaverage=0,paverage=0

Node *p3=head

while(p3)

{

if(p3->average>=90&&p3->average<=100) a+=1

else if(p3->average>=80&&p3->average<90)b+=1

else if(p3->average>=70&&p3->average<80) c+=1

else if(p3->average>=60&&p3->average<70) d+=1

else e+=1

asum+=p3->sum

aaverage+=p3->averagep3=p3->next

}

f=a+b+c+d+e

averagesum=asum/f

paverage=aaverage/f

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 总 人 数:"<<f<<endl

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 优 人 数:"<<a<<" | "<<"优 秀 率: "<<a*100/f<<"%"<<endl

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 良 好 的人数:"<<b<<" | "<<"良 好 率: "<<b*100/f<<"%"<<endl

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 中 等 的人数:"<<c<<" | "<<"中 等 率: "<<c*100/f<<"%"<<endl

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 所有合格人数:"<<a+b+c+d<<" | "<<"合 格 率: "<<(a+b+c+d)*100/f<<"%"<<endl

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 不 合 格 数:"<<e<<" | "<<"不合格率: "<<e*100/f<<"%"<<endl

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 总分的平均分:"<<averagesum<<" | "<<"所有科目的平均分:"<<paverage<<endl

cout<<"|-------------------------------------------------------|"<<endl

}

Node* Link::linkFind(int nid)

{//查找id值为nid的结点,返回该结点的指针

Node *p=head

//没找到符合条件的结点的话,返回的指针值为

NULLwhile(p)

{if(p->id==nid)break

else

p=p->next

}return p

}

Node* Link::getHead()

{return head}

//class Link 结束

//类Student,用于包装Link类及菜单 *** 作

class Student

{

private:

Link slink

//Link对象成员

bool k

//记录数据是否被修改

public:

Student()

void studentClear()

void studentInsert()

void studentDelete()

void studentFind()

void studentView()

void studentLoad()

void studentSave()

void studentAverageTotle()

//按平均分数统计等级

void Exit()

//退出程序

void showMenu()

//显示菜单

void showTip()

//显示 *** 作提示

void doMenu(char n)

//执行相应菜单项功能

}

Student::Student()

{

Link()

//调用成员对象的构造函数

studentLoad()

//从文件中读取数据,创建链表

k=false

//设置数据被修改

}

void Student::studentClear()

{

//清空学生记录

slink.linkClear()

cout<<"成功清空学生记录!"<<endl

}

void Student::studentInsert()

{

//插入学生记录

Node *p=new Node()

cout<<"请输入学号:"

cin>>p->id

cout<<"请输入姓名:"

cin>>p->name

if(!slink.linkFind(p->id))

{

//判断学号是否存在

slink.linkInsert(p)

k=true

}

else

cout<<"学号为"<<p->id<<"的学生已存在,插入失败!"

cout<<"请输入成绩:"<<endl

cout<<"英语:"cin>>p->english

cout<<endlcout<<"数学:"

cin>>p->math

cout<<endl

cout<<"C++:"

cin>>p->c

cout<<endl

(p->sum)=(p->english)+(p->math)+(p->c)

//计算总分

(p->average)=((p->english)+(p->math)+(p->c))/3

//计算平均成绩

}

void Student::studentDelete()

{

//删除学生记录

int i

if(slink.linkIsEmpty())

//链表为空的情况

cout<<"没有学生记录!"<<endl

else{

cout<<"请输入学号:"

cin>>i

if(slink.linkDelete(i))

{

cout<<"成功删除学号为"<<i<<"的学生记录!"<<endl

k=true

}

else

cout<<"没有找到学号为"<<i<<"的学生!"<<endl

}

}

void Student::studentFind()

{

//查找某学号的学生记录

int n

Node *pif(slink.linkIsEmpty())

//链表为空的情况

cout<<"没有学生记录!"<<endl

else{cout<<"请输入要查找的学号:"

cin>>np=slink.linkFind(n)

//获得找到的结点的指针

if(p)

{

//指针值不为NULL时

(p->sum)=(p->english)+(p->math)+(p->c)

//计算总分

(p->average)=((p->english)+(p->math)+(p->c))/3

//计算平均成绩

slink.linkGrade(p)

cout<<setw(6)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"英语"<<setw(8)<<"数学"<<setw(8)<<"C++"<<setw(8)<<"总分"<<setw(8)<<"平均分"<<setw(8)<<"等级"<<endl

cout<<setw(6)<<p->id<<setw(8)<<p->name<<setw(8)<<p->english<<setw(8)<<p->math<<setw(8)<<p->c<<setw(8)<<p->sum<<setw(8)<<p->average<<setw(8)<<p->grade<<endl

}

else

//指针值为NULL时

cout<<"没有找到学号为"<<n<<"的学生记录!"<<endl

}

}

void Student::studentView()

{

//显示所有学生的记录

if(slink.linkIsEmpty())

cout<<"没有学生记录!"<<endl

else

slink.linkView()

}

void Student::studentLoad()

{//从文件中读入数据,创建链表

Node *pint nid

ifstream infile("data.txt")

if(!infile)cerr<<"错误:数据文件不能打开!\n"

else while(infile>>nid)

{

//读取学号,直到读空

p=new Node()

p->id=nid

infile>>p->name>>p->english>>p->math>>p->c>>p->sum>>p->average>>p->grade

//读取姓名

slink.linkInsert(p)

}

infile.close()

//关闭文件

}

void Student::studentSave()

{

//将数据保存到文件

Node *p=slink.getHead()

ofstream outfile("data.txt")

if(!outfile)cerr<<"错误:数据文件不能打开!\n"

else

{

while(p)

{

outfile<<p->id<<' '<<p->name<<' '<<p->english<<' '<<p->math<<' '<<p->c<<' '<<p->sum<<' '<<p->average<<' '<<p->grade<<endl

p=p->next

}

k=false

cout<<"保存成功!"<<endl

}

}

void Student::studentAverageTotle()

{

if(slink.linkIsEmpty())//执行语句;

else

slink.linkAverageTotle()

}

void Student::Exit()

{

char s='Y'

if(k){

//判断数据是否修改

cout<<"数据已经改变,是否保存?(y/n):"

cin>>sif(s=='y'||s=='Y')studentSave()

}

cout<<"已安全退出,"

system("pause")

exit(0)

}

void Student::showMenu()

{

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 学生信息管理系统 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 1. 清空:清除所有学生数据 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 2. 添加:插入一条学生数据 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 3. 删除:删除指定学生数据 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 4. 查找:查找指定学生数据 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 5. 显示:显示所有学生数据 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 6. 保存:保存所有学生数据 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 7. 统计:按学生平均分统计 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 0. 退出:安全的退出本系统 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl<<endl

}

void Student::showTip()

{

cout<<endl

cout<<"------------------- *** 作完成---------------------"<<endl

cout<<"-----------------选择0-7继续-------------------"<<endl

cout<<"请选择:"

}

void Student::doMenu(char n)

{

switch(n)

{

case '1':studentClear()break

case '2':studentInsert()break

case '4':studentFind()break

case '3':studentDelete()break

case '5':studentView()break

case '6':studentSave()break

case '7':studentAverageTotle()break

case '0':Exit()break

default:cout<<"输入错误!"

}

}

int main()

{

Student s

char i='9'

s.showMenu()

cout<<"选择对应数字进行 *** 作:"

while(1)

{cin>>i

system("cls")

//清除屏幕

s.showMenu()

s.doMenu(i)

s.showTip()

}

return 0

}

希望能对你有帮助

#include "stdafx.h"

#include<iostream.h>

#include<string.h>

#include<iomanip.h>

class stu

{

char name[20]

double age,homephone,telphone

char sex

public:

stu(){}

stu(char n[20],char se,double ag,double ho,double te)

{

strcpy(name, n)

age=ag

homephone=ho

telphone=te

}

friend void main()

}

void main()

{

cout<<"请选择您需要的 *** 作!"<<endl

cout<<" *** 作:"<<endl

cout<<"(0)通讯录录入"<<endl

cout<<"(1)增加人员"<<endl

cout<<"(2)删除人员"<<endl

cout<<"(3)修改数据"<<endl

cout<<"(4)显示记录"<<endl

cout<<"(5)退出"<<endl

cout<<"选择相关 *** 作请输入相对的括号里的阿拉伯数字!"<<endl

stu *s[50]

int i=0

int j=0

bool flag2=0

char p

do

{

cin>>p

if((p>='0'&&p<='5'))

flag2=1

else

cout<<"指令错误!请重新输入:"<<endl

}while(flag2==0)

switch(p)

{

case '0': //(0)通讯录录入

{

char name[20]

double age,homephone,telphone

char sex,c

do{

cout<<"请输入姓名:"<<endl

cin>>name

cout<<"请输入性别:"<<endl

cin>>sex

cout<<"请输入年龄:"<<endl

cin>>age

cout<<"请输入家里的电话号码:"<<endl

cin>>homephone

cout<<"请输入移动电话号码:"<<endl

cin>>telphone

j++

s[i]=new stu(name, sex, age, homephone , telphone)

i++

cout<<"数据录入成功,想继续录入吗(y/n)"<<endl

cin>>c

flag2=0

do

{

if(c!='y'&&c!='n')

{

cout<<"指令错误!请重新输入!"<<endl

cin>>c

}

else

flag2=1

}while(flag2==0)

}while(c=='y')

break}

////////////////////////////////////////////////////////////////////

case '1': //(1)增加人员(Add)

{

char name[20]

double age,homephone,telphone

char sex,c

do{

cout<<"请输入姓名:"<<endl

cin>>name

cout<<"请输入性别:"<<endl

cin>>sex

cout<<"请输入年龄:"<<endl

cin>>age

cout<<"请输入家里的电话号码:"<<endl

cin>>homephone

cout<<"请输入移动电话号码:"<<endl

cin>>telphone

j++

s[i]=new stu(name, sex, age, homephone , telphone)

i++

cout<<"数据录入成功,想继续录入吗(y/n)"<<endl

cin>>c

flag2=0

do

{

if(c!='y'&&c!='n')

{

cout<<"指令错误!请重新输入!"<<endl

cin>>c

}

else

flag2=1

}while(flag2==0)

}while(c=='y')

break}

case '2': //(2)删除人员(Delete)

{

char name[20]bool flag3=0char c

do{

cout<<"请输入您要删除的学生姓名:"<<endl

cin>>name

for(int h=0h<ih++)

{

if(strcmp(name,s[h]->name)==0)

{

flag3=1

i--

do{

s[h]=s[h+1]

h++

}while(h<=i)

}

}

if(flag3==0)

cout<<"您要求删除的对象本来就不存在!请检查输入的正确性!"

cout<<"要继续删除吗?(y/n)"<<endl

cin>>c

if(c!='y'&&c!='n')

{

cout<<"指令错误!请重新输入!"<<endl

cin>>c

}

}while(c=='y')

break}

case '3': //(3)修改数据(Alter)

{

char name[20],sedouble ag,ho,teflag2=0

char c

do

{

cout<<"请输入您要修改的学生的姓名:"<<endl

cin>>name

for(int h=0h<ih++)

{

if(strcmp(name,s[h]->name)==0)

{

flag2=1

cout<<"请输入性别:"<<endl

cin>>se

cout<<"请输入年龄:"<<endl

cin>>ag

cout<<"请输入家里的电话号码:"<<endl

cin>>ho

cout<<"请输入移动电话号码:"<<endl

cin>>te

s[h]->sex=se

s[h]->age=ag

s[h]->homephone=ho

s[h]->telphone=te

cout<<"数据修改成功!"

}

}

if(flag2==0)

{

cout<<"您要修改的学生本来就不存在!请检查重新输入!"<<endl

}

cout<<"想继续修改吗(y/n)"<<endl

cin>>c

if(c!='y'&&c!='n')

{

cout<<"指令错误!请重新输入!"<<endl

cin>>c

}

}while(c=='y')

break}

case '4': //(4)显示记录(List)

{

cout<<"本系统所有通讯录的数据如下:"<<endl

if(i==0)

cout<<"管理系统中没有录入数据或者数据已经被删除!"<<endl

for(int k=0k<ik++)

{

cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name<<

"性别:"<<" "<<s[k]->sex<<"年龄:"<<" "<<s[k]->age

<<"家里的电话号码:"<<" "<<s[k]->homephone<<"移动电话号码:"

<<" "<<s[k]->telphone<<endl

}

break} }

cout<<"您想继续进行其他 *** 作吗?(y/n)"<<endl

bool flag4=0

do

{

cin>>p

if(p!='y'&&p!='n')

cout<<"指令错误!请重新输入!"<<endl

else

flag4=1

}while(flag4==0)

if(p=='y')

cout<<"请输入 *** 作代码(0 通讯录录入\n1 增加人员(Add)\n2 删除人员(Delete)\n3 修改数据(Alter)\n4 显示记录(List)\n 5 退出(Exit))"<<endl

cin>>p

for(int x=0x<ix++)

{

delete s[x]

cout<<"删除所有成员!"<<endl

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7762525.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-09
下一篇2023-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存