课程设计报告.docx

上传人:b****4 文档编号:6203361 上传时间:2023-05-09 格式:DOCX 页数:14 大小:221.59KB
下载 相关 举报
课程设计报告.docx_第1页
第1页 / 共14页
课程设计报告.docx_第2页
第2页 / 共14页
课程设计报告.docx_第3页
第3页 / 共14页
课程设计报告.docx_第4页
第4页 / 共14页
课程设计报告.docx_第5页
第5页 / 共14页
课程设计报告.docx_第6页
第6页 / 共14页
课程设计报告.docx_第7页
第7页 / 共14页
课程设计报告.docx_第8页
第8页 / 共14页
课程设计报告.docx_第9页
第9页 / 共14页
课程设计报告.docx_第10页
第10页 / 共14页
课程设计报告.docx_第11页
第11页 / 共14页
课程设计报告.docx_第12页
第12页 / 共14页
课程设计报告.docx_第13页
第13页 / 共14页
课程设计报告.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

课程设计报告.docx

《课程设计报告.docx》由会员分享,可在线阅读,更多相关《课程设计报告.docx(14页珍藏版)》请在冰点文库上搜索。

课程设计报告.docx

课程设计报告

C/C++程序课程设计

题目一:

建立简单学生成绩录入系统

题目二:

建立简单通话记录生成系统

班级

姓名

学号

 

题目一:

建立简单学生成绩录入系统

一概述:

本程序的目的是存储学生的信息,包括学号、姓名、成绩。

程序运行后,输入相应的编号可以实现添加、删除、查询、打印学生信息,并且学生信息输入完毕后,学生将按照成绩由高到低进行排列,这点可以从打印出来的结果看出。

二软件结构:

本程序主要运用链表的使用规则来进行编写代码,从创建链表到插入链表,以及删除某个成员和显示链表等都是用指针来实现的。

链表建立如下:

num

name

score

next

num

name

score

next

num

name

score

next

num

name

score

next

head->

NULL

从图我们可以看出,如果要删除或是查询某个学生信息,只需找到head指针,然后用head=head->next,就可以依次找到所需要的东西。

程序运行如下:

添加:

删除:

查询:

打印:

三关键代码

structStudent

{intnum;

charname[10];

floatscore;

Student*next;

};这一段是定义一个结构体类型Student,并且定义一个指向结构体的next指针,这是后面所有代码的铺垫,可谓是最基本的代码,同时也决定了后面的代码需实现链表的创建等操作。

if(head==NULL)

head=dest;

elseif(head->score<=dest->score)

{

dest->next=head;

head=dest;

}

else

insert(head,dest);

voidinsert(Student*head,Student*dest)

{

Student*temp=head;

while(temp->next!

=NULL)

{

if(head->score>dest->score&&dest->score>=temp->next->score)

{dest->next=temp->next;

temp->next=dest;

return;

}

temp=temp->next;

}

temp->next=dest;

dest->next=NULL;

这段代码实现的是学生按成绩高低进行排列,分成三个部分:

第一部分:

当head=NULL;将dest赋给head,相当于添加第一个成员结构体。

第二部分:

需要在链表的最前面添加新成员结构体,dest->next=head;head=dest;运用此代码就可以达到目的。

第三部分:

需要从链表的第二个成员结构体开始,实现插入新结构体的目的,此时,本程序新建了一个insert函数,通过调用此函数来添加新结构体,insert函数主要是判断成绩的高低,以确定需要插入的位置。

难点代码:

boolremove(Student*&head,floatscore)

{if(head==NULL)

{

returnNULL;

}

if(head->score==score)

{Student*p=head;

head=head->next;

deletep;

returntrue;

}

Student*pf=head;

Student*pc=head->next;

if(pc==NULL)

returnfalse;

do

{if(pc->score=score)

break;

pf=pc;

pc=pc->next;

}while(pc!

=NULL);

pf->next=pc->next;

deletepc;

returntrue;

}删除,这段代码是本程序最难的代码,它没有想像的那么简单,也需要分成三个部分:

第一部分:

如果head=NULL;returnfalse;

第二部分:

如果要删除的是头节点,那么需先拿下头结点

if(head->score==score)

{Student*p=head;

head=head->next;

deletep;

returntrue;

}用delete运算符撤销空间,并returntrue。

第三部分:

当所要删除的不是头结点时,就需要用循环来确定位置,并定义另外一个指针指向它,然后释放,并且returntrue;如果循环结束还未找到要删除的节点,则returnfalse。

本部分重点在于remove函数的返回值,定义的类型为逻辑型,在判断链表中是否存在所要删除的节点时,可以从返回值为true和false中得到,如果是true,打印“删除成功”。

题目二:

建立简单通话记录生成系统

一概述:

本程序的目的是记录通话记录,并把所有记录保存在一文件中,便于查看。

具体目标是可以实现添加、删除、查询、保存和读取通话记录等操作。

二软件结构

程序与上一程序不同,利用的结构体数组的知识,将添加的通话记录保存在结构体数组中,之后的操作可以通过for循环及其他知识来实现。

本程序没有用指针的方式,原因在于该程序软件要求能实现文件的保存和读取,用指针的方式很难实现,因此采用数组的方式以达到要求。

typedefstructPhoneItem

{charname[20];

intphonenum;

}PI,*pPI;此段代码是定义PhoneItem结构体的内容,包含姓名和电话号码,并且将类型PhoneItem简写成PI,主要是为了方便以后的代码书写更简洁。

PIphonerecord[100];这句话就是定义PI类型数组,数组名为phonerecord,数组里的每个元素包含的内容就是结构体里定义的姓名和电话号码。

通过phonerecord[i].name,phonerecord[i].phonenum来访问元素内容。

运行结果如下:

输入电话记录:

删除电话记录:

查询电话记录:

读取电话记录:

三关键代码

strcpy(phonerecord[i].name,name);这句话的作用是将当前输入name复制给phonerecord[i].name,这其中用了strcpy字符串复制函数,而且最简洁的方式就是运用此种方法。

不能直接赋值过去的原因是name是数组名,name的值是地址,因而不可以这样做,以及代码中还会用到strcmp函数。

staticinti=0;

intindex;

cin>>index;

if(index==1)

{i+=1;

charname[20];

intphonenum;

cout<<"请输入信息:

"<

cin>>name>>phonenum;

strcpy(phonerecord[i].name,name);

phonerecord[i].phonenum=phonenum;

}

staticinti=0;定义一个局部静态变量i,之所以用static的目的是这个i代表的是所添加的数组元素个数,因为元素个数会因为某些操作而变化,比如删除某个通话记录等,static的好处在于可以使i的值保持为当前值且不被释放,这句话可以称为是本程序最巧妙的地方。

之后的i+=1,是为了改变i的值,以保证i总是所输入的元素个数。

elseif(index==2)

{boolflag=false;

intphonenum;

cout<<"请输入要删除的电话号码:

";

cin>>phonenum;

for(intj=1;j<=i;j++)

{if(phonerecord[j].phonenum==phonenum)

{for(;j

{

phonerecord[j].phonenum=phonerecord[j+1].phonenum;strcpy(phonerecord[j].name,phonerecord[j+1].name);

}

cout<<"删除成功!

"<

flag=true;

break;

}

}

if(flag==true)

i-=1;

这部分代码是实现删除通话记录这一操作,这里也定义bool型的flag来记录true和false,通过嵌套循环找到要删除的数组元素,然后用赋值语句将该数组元素被下一元素遮盖,直到数组末尾,再写i-=1,将总数组元素个数减一,这样在以后的保存和读取中就不会显示已删除的元素,这段代码的内涵也较为丰富,知识覆盖面广。

ofstreamoutfile;

outfile.open("f1.txt",ios:

:

binary);

if(!

outfile)

{cout<<"fileopenerror!

"<

exit

(1);

}

for(intj=1;j<=i;j++)

{outfile.write((char*)&phonerecord[j],sizeof(PI));

}

outfile.close();这段是二进制文件的写入,运用ofstream,因此需要在开头写上#include,来包含头文件。

这段代码是典型二进制文件写入的代码。

elseif(index==5)

{ifstreaminfile;

infile.open("f1.txt",ios:

:

binary);

if(!

infile)

{cout<<"fileopenerror!

"<

exit

(1);

}

PItemp;

for(intj=1;j<=i;j++)

{infile.read((char*)&temp,sizeof(PI));

cout<

}

infile.close();

}

这段代码是二进制文件读取的典型代码,与二进制文件写入相反,唯一区别的是定义了PItemp;利用temp.name和temp.phonenum来实现数组元素的显示。

本程序并没有将通话记录类似程序一那样进行排列,而是按照输入的顺序来显示的,这样从某一方面来可以体现程序的简洁性。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2