计算机程序编程课程设计报告.docx
- 文档编号:13958655
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:59
- 大小:236.19KB
计算机程序编程课程设计报告.docx
《计算机程序编程课程设计报告.docx》由会员分享,可在线阅读,更多相关《计算机程序编程课程设计报告.docx(59页珍藏版)》请在冰点文库上搜索。
计算机程序编程课程设计报告
计算机程序编程课程设计
实验报告
实验一车辆违章管理系统
(2-6页)
实验二学生成绩管理系统
(7-37页)
学号:
52112333
班级:
11级23班
姓名:
王晓宇
2013年8月31日
实验一车辆违章管理系统
一.系统功能模块结构图
1.车辆及违章信息的录入。
2.基于车牌号查询每台车辆的违章情况。
3.基于车牌号统计每台车辆的罚款总金额。
主函数
3.查找、修改数据
2.显示输出
1.创建数据
二、数据结构设计及用法说明
用链表存储数据:
typedefstructlinknode/*结点定义,DT1是数据域,NEXT是指针*/
{data1dt1;
structlinknode*next;
}lnode;
数据域定义如下:
typedefstructPe
{
charvno[8];/*车牌号*/
charname[15];/*车主姓名*/
inttimes1;/*违章停车次数*/
inttimes2;/*闯红灯次数*/
inttimes3;/*超速次数*/
}PECCANCY;
用法说明:
本程序使用结构体数据类型数组编程,首先申明结构体,数组上限为500个数据。
三.程序结构(画流程图)
4.各模块的功能
1.录入车辆及违章信息
建立数组,通过循环体为数组中每一组数据赋值。
1继续赋值,0输入停止。
2.输入车牌号查询其违章情况及罚款金额
输入需要查询的车牌号,通过循环体将该车牌号与数组中的数据做比较,直到一组数据中的车牌号与所查找的车牌号相同,输出该车牌号所相关的信息及违章情况并计算出罚款总金额后输出。
若在数组中无此车牌号,则输出“未找到符合条件的车辆”,并结束。
5.实验结果(包括输入数据和输出结果)
输入数据:
输出结果:
6.体会
通过本次编程,复习了C语言的结构体和数组知识,并对结构体和数组做了巩固和提高,为下一个编程使用结构体和链表打下基础。
通过这个简单程序的编译,我认为最大的收获是培养了编程的思想以及对程序如何编译如何简化的粗浅感受。
其实所有大程序都是由许多小程序相互串联形成的,只有把每个小程序编好大程序才能手到擒来。
编成功后进一步巩固C语言的学习,主要目的是培养一定的综合编程能力。
对于编译错误,灵活使用注释,一点点确定出问题的代码,结合基本知识,改正。
对于运行有错:
学习使用调试工具,灵活设置断点,并在断点处观察变量值,逐步分析确定错误代码,改正。
七.附录:
程序清单
#include
#include
typedefstructPe
{
charvno[8];/*车牌号*/
charname[15];/*车主姓名*/
inttimes1;/*违章停车次数*/
inttimes2;/*闯红灯次数*/
inttimes3;/*超速次数*/
}PECCANCY;
voidmain()
{
intd=0,sum=0;
inti,b,c,f;
chare[8];
PECCANCYa[500];
printf("请输入车辆信息:
\n");
for(i=0;i<500;i++)
{
printf("请输入车牌号:
\n");
scanf("%s",a[i].vno);
printf("请输入车主姓名:
\n");
scanf("%s",a[i].name);
printf("请输入违章停车次数:
\n");
scanf("%d",&a[i].times1);
printf("请输入闯红灯次数:
\n");
scanf("%d",&a[i].times2);
printf("请输入超速次数:
\n");
scanf("%d",&a[i].times3);
printf("请输入1继续输入车辆信息,输入0结束输入车辆信息\n");
scanf("%d",&b);
if(b==0)
break;
}
printf("\n\n\n");
printf("请输入车牌号查询其违章情况及罚款金额:
\n");
for(c=0;c<500;c++)
{
printf("输入车牌号:
\n");
scanf("%s",e);
for(i=0;i<500;i++)
{
if(strcmp(e,a[i].vno)==0)
{
printf("车主姓名:
");
printf("%s\n",a[i].name);
printf("违章停车次数:
");
printf("%d\n",a[i].times1);
printf("闯红灯次数:
");
printf("%d\n",a[i].times2);
printf("超速次数:
");
printf("%d\n",a[i].times3);
sum=(a[i].times1)*100+(a[i].times2*200)+(a[i].times3)*500;
printf("车牌号为:
");
printf("%s",e);
printf("的罚款总金额:
");
printf("%d\n",sum);
d=1;
break;
}
}
if(d!
=1)
printf("未找到符合条件的车辆\n");
printf("请输入1继续输入车辆信息,输入0结束输入车辆信息\n");
scanf("%d",&f);
if(f==0)
break;
}
printf("\n\n\n");
}
实验二学生成绩管理系统
一、系统功能模块结构图
1.创建数据
2.显示输出
3.插入记录
4.删除记录
主函数
5.查找记录
6.文件输出
7.文件输入
8.统计
9.按班输出
二、数据结构设计及用法说明
用链表存储数据:
typedefstructlinknode/*结点定义,DT1是数据域,NEXT是指针*/
{studentdt1;
structlinknode*next;
}Stu;
数据域定义如下:
typedefstructSt1
{charIDNumber[16];/*学号*/
charFamilyName[16];/*姓*/
charGivenName[16];/*名*/
intsex;/*性别(0代表"女",1代表"男")*/
intBirthYear;/*出生年*/
intBirthMonth;/*出生月*/
intBirthDay;/*出生日*/
floatscore[4];/*成绩*/
floatsum;/*总分*/
floataverage;/*平均分*/
}student;
用法同实验一相同。
三、各模块的功能
1.输入数据
同实验一中的输入数据部分。
2.显示数据
同实验一中的显示数据部分。
3.插入记录
先进行排序,再从头查找,当要插入的数据在两个节点中间时,将输入的数据插入其中。
1.删除记录
输入要删除的数据中的姓名,从头节点开始向后查找,如果姓名相同显示该数据,询问是否删除,如果选是,删除该节点;如果选否,取消删除。
5.查找记录
输入要删除的数据中的姓或名,从头节点开始向后查找,如果符合,显示该数据。
6.保存到文件
输入文件名,将当前的全部数据输出到该文件中保存。
7.从文件读取
输入文件名,从该文件中导入数据。
8.统计
进行各种数据的统计。
9.按班级查询成绩
输入班级号,显示该班所有同学的成绩。
0.退出
四、实验结果
菜单:
按下回车键
1.插入记录
2.显示记录
3.插入记录
4.删除记录
5.查找记录
6.保存到文件
7.从文件读取
8.统计学生成绩
输入1
输入2
例如:
输入1
例如:
输入5
输入3
9.按班级查询成绩
五、体会
这次的课程设计,在实验一的基础上,熟悉了对文件的操作。
从结果上来看,虽然要求的功能全都实现了,但程序代码不精简,很多模块运行效率很低,但是功能可以正常运行。
这次试验除了掌握各种语法现象外,我们还要设身处地从计算机的思维角度看待和处理问题等等。
这一点要远比掌握各种语法重要的多,也更加难以培养。
同时经过这次的编程,对C语言的理解及认识有了深一步的了解。
我以后要更加努力地学习编程,因为不仅编程很有意思,能激发我的兴趣,更重要的是,它是一个取之不尽用之不竭的宝库,对我将来的生活,工作有很大作用。
以后我还要学习更高深的汇编语言,所以我要先好好学习C语言,为我以后的学习打下良好的基础。
通过这学期我还发现,有时候对于编程,知识并不是最主要的,最主要的是思维,对于所要编程的东西的想法,构思。
但我也知道这并不是一蹴而就就能练成的,所以我会努力!
七.附录:
程序清单
#include
#include
#include
#include
#include
#defineMAXFL20
typedefstructSt1
{charIDNumber[16];/*学号*/
charFamilyName[16];/*姓*/
charGivenName[16];/*名*/
intsex;/*性别(0代表"女",1代表"男")*/
intBirthYear;/*出生年*/
intBirthMonth;/*出生月*/
intBirthDay;/*出生日*/
floatscore[4];/*成绩*/
floatsum;/*总分*/
floataverage;/*平均分*/
}student;
typedefstructlinknode//节点定义,DT1是数据域,NEXT是指针
{studentdt1;
structlinknode*next;
}Stu;
intll_cnt;//计录节点个数
intempty_ll(Stu*head)//判断是否为空
{if(head==NULL)
return1;
else
return0;
}
//**********************输出用****************************
voidprintdt(studentpr)/*用来输出数据的函数*/
{printf("学号:
%s",pr.IDNumber);
printf("姓名:
%s%s",pr.FamilyName,pr.GivenName);
if(pr.sex==0)
printf("性别:
女");
else
printf("性别:
男");
printf(“出生年月日:
%d/%d/%d\n",pr.BirthYear,pr.BirthMonth,pr.BirthDay);
printf("各科成绩:
\n");
printf("外语:
%f,高数:
%f,C语言:
%f,马哲:
%f\n",pr.score[0],pr.score[1],pr.score[2],pr.score[3]);
printf("总成绩:
%f,平均成绩:
%f\n",pr.sum,pr.average);
}
voidprint_ll_cj(Stu*head)
{Stu*p1;
intm1=1;
p1=head;
if(empty_ll(p1))
{printf("没有数据\n");
return;
}
else
{while(p1!
=NULL)
{printf("%d\n",m1);
printf("学号:
%s",p1->dt1.IDNumber);
printf("姓名:
%s%s",p1->dt1.FamilyName,p1->dt1.GivenName);
printf("各科成绩:
\n");
printf("平均成绩:
%f\n",p1->dt1.average);
printf("外语:
%f,高数:
%f,C语言:
%f,马哲:
%f\n",p1->dt1.score[0],p1->dt1.score[1],p1->dt1.score[2],p1->dt1.score[3]);
printf("\n");
p1=p1->next;
m1++;
}
}
}
//**************************排序用****************************
Stu*insert_avr_new(Stu*head,Stu*p)//按成绩将P中的数据插入数据
{Stu*p1,*p2;
if(head==NULL)
{printf("空链表,无法进行插入\n");
returnNULL;
}
if(p->dt1.average>head->dt1.average)//先与头节点比较,比头节点大
{p->next=head;//新节点成为头节点
head=p;
returnhead;
}
else//比头节点小,继续向后比较
{p1=head;//p1是P2的前一个节点
p2=p1->next;//准备每次与P2比较
while(p2!
=NULL)
{if(p->dt1.average>p2->dt1.average)
{p->next=p2;
p1->next=p;
returnhead;
}
p1=p2;
//p1是P2的前一个节点
p2=p1->next;
}//在这里P2==NULL,数据应插在P1之后
p->next=p2;
p1->next=p;
returnhead;
}
}
Stu*sort_avr_new(Stu*head)//先断开头节点,作为新的链表,再依次将后面的节点按大小插入到该表中
{Stu*p1;
p1=head->next;//P1指向头节点的下一个节点
head->next=NULL;//先断开头节点
while(p1!
=NULL)
{head=insert_avr_new(head,p1);
p1=p1->next;
}
returnhead;
}
voidexchng_ll(Stu*p1,Stu*p2)//互换节点数据域的函数
{studentdtc;
dtc=p1->dt1;
p1->dt1=p2->dt1;
p2->dt1=dtc;
}
voidsort_ll_avr(Stu*head)
{//按平均成绩排序,按数据域从大到小排序,只交换数据域,无返回
Stu*p1;
while(head->next!
=NULL)
{//选择排序法,HEAD在后,P1在前HEAD->NEXT==P1
p1=head->next;
while(p1!
=NULL)
{
if(p1->dt1.average>head->dt1.average)
exchng_ll(p1,head);
p1=p1->next;
}
head=head->next;
}
printf("排序完成\n");
}
voidsort_ll_score(Stu*head,inti)
{//按平均成绩排序,按数据域从大到小排序,只交换数据域,无返回
Stu*p1;
while(head->next!
=NULL)
{//选择排序法,HEAD在后,P1在前HEAD->NEXT==P1
p1=head->next;
while(p1!
=NULL)
{if(p1->dt1.score[i]>head->dt1.score[i])
exchng_ll(p1,head);
p1=p1->next;
}
head=head->next;
}
printf("排序完成\n");
}
voidsort_ll_id(Stu*head)
{//按学号排序,按数据域从小到大排序,只交换数据域,无返回
Stu*p1;
while(head->next!
=NULL){
//选择排序法,HEAD在后,P1在前HEAD->NEXT==P1
p1=head->next;
while(p1!
=NULL){
if(strcmp(p1->dt1.IDNumber,head->dt1.IDNumber)<0)
exchng_ll(p1,head);
p1=p1->next;
}
head=head->next;
}
printf("排序完成\n");
}
//*********************************输入数据用**************
studentscandt()
{//用来输入数据的函数,返回数据类型
studentdt;//暂存输入的数据
unsignedinti,m;//判断用
//-------------------------判断时间用---------------------------
structtm*ptm;
longts;
inty;
ts=time(NULL);
ptm=localtime(&ts);
y=ptm->tm_year+1900;//年
//------------------------学号-------------------------
printf("请输入学号:
");
scanf("%s",dt.IDNumber);
if((dt.IDNumber[0]=='0')&&(dt.IDNumber[1]=='\0'))//说明输入的是0
returndt;
i=1;
for(m=0;m<8;m++){//接受错误输入的解决方法
i=(dt.IDNumber[m]>='0')&&(dt.IDNumber[m]<='9')&&i;//确认0-m个数据是否均在允许范围内
}
if(!
((dt.IDNumber[8]=='\0')&&i)){//输入不合法
while(!
((dt.IDNumber[8]=='\0')&&i)){
printf("\n输入有误\n\n");
printf("请输入学号(八位数,如52102115):
");
scanf("%s",dt.IDNumber);
if((dt.IDNumber[0]=='0')&&(dt.IDNumber[1]=='\0'))//说明输入的是0
returndt;
i=1;
for(m=0;m<4;m++){//接受错误输入的解决方法
i=(dt.IDNumber[m]>='0')&&(dt.IDNumber[m]<='9')&&i;
}
}
}
printf("\n");
//------------------------姓名-------------------------
printf("请输入姓名,格式为(姓名):
");
scanf("%s%s",dt.FamilyName,dt.GivenName);
i=0;
for(m=1;m<16;m++){//接受错误输入的解决方法
i=(dt.FamilyName[m]=='\0')||i;//i=1,合法,i=0不合法
}
if(!
i){//输入不合法while(!
i){
printf("\n输入有误,姓或名的长度不能超过15个字母\n\n");
printf("请输入姓名,格式为(姓名):
");
scanf("%s%s",dt.FamilyName,dt.GivenName);
i=0;
for(m=1;m<16;m++){//接受错误输入的解决方法
i=(dt.FamilyName[m]=='\0')||i;//i=1,合法,i=0不合法
}
}
}
i=0;
for(m=1;m<16;m++){//接受错误输入的解决方法
i=(dt.GivenName[m]=='\0')||i;//i=1,合法,i=0不合法
}
if(!
i){//输入不合法
while(!
i){
printf("\n输入有误,姓或名的长度不能超过15个字母\n\n");
printf("请输入姓名,格式为(姓名):
");
scanf("%s%s",dt.FamilyName,dt.GivenName);
i=0;
for(m=1;m<16;m++){//接受错误输入的解决方法
i=(dt.GivenName[m]=='\0')||i;//i=1,合法,i=0不合法
}
}
}
//------------------------性别-------------------------
printf("请输入性别(0->女,1->男):
");
scanf("%d",&dt.sex);
if(!
(dt.sex==0||dt.sex==1)){//接受错误输入的解决方法
while(!
(dt.sex==0||dt.sex==1)){
printf("\n输入有误,请重新输入(0->女,1->男):
\n");
scanf("%d",&dt.sex);
}
}
//------------------------出生年月日-------------------------
printf("请输入出生年月日,格式为(年月日)");
scanf("%d%d%d",&dt.BirthYear,&dt.B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 程序 编程 课程设计 报告