1、数学与计算机学院1303班实验报告武 汉 轻 工 大 学数 计 学 院C语言课程设计报告班 级:计算机类1303班 学 号:1305110050 姓 名:刘文斌 指导教师:丁月华 日 期:2014 年 6 月 一、实验目的1.在编辑应用程序过程中,逐步加深对C语言编程的理解;2.加强实践的能力,动手能力,同时进一步对所学的知识进行巩固;3.培养初步编程的能力,为以后的学习奠定基础。二、实验内容运用所学的C语言知识编辑应用程序:班级成绩管理系统以及运动的时钟三系统软件环境:本程序主要运行在: Visual C+ 6.0四.课程设计题目:1.必做题:班级成绩管理系统 对一个有N个学生的班级,每个学
2、生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存、查询等操作的管理。功能要求: (1)本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。 (2)本系统显示这样的菜单: 请选择系统功能项: a、成绩录入 b、成绩显示 c、成绩保存 d、成绩排序e、成绩修改(要求先输入密码) f、成绩统计1)显示每门课程成绩最高的学生的基本信息。 2)显示每门课程的平均成绩 ,柱状图显示。3)显示超过某门课程平均成绩的学生人数。 4)显示某门课程每个分数段区间的人数,用饼状图显示。g、退出系统 (3)执行一个具体的功能之后,程序将重新显示菜单。 (4)将学生成绩保存到文件
3、中。2.选做题:运动的时钟目的与要求:目的是让读者掌握调用系统函数及在程序中运用数学原理来制作运动物体的方法,同时学会使用声音函数,以制作出绘声绘色的动画效果。基本要求:运用模块化的设计思想完成各功能模块的设计;程序运行界面美观,运行时伴有声音;写出详细设计说明书。创新要求:在基本要求达到后,进行创新设计,如增加整点报时功能,定时功能等。设计方法与基本原理:1 问题描述利用Turbo C提供的图形库,来制作运动的时钟效果,同时要伴有时钟的滴答声。2 基本原理利用dos.h中的gettime和getdate得到系统的时间和日期,然后利用graphics.h中的绘图函数显示在屏幕上。3 程序总体结
4、构设计主函数由屏幕初始化函数(画出时钟外貌)和时钟运行函数(画出运行的时钟指针及发出滴答声)两部分构成。其主要部分如下:#include #include #include void main() 屏幕初始化函数; 时钟运行函数;五数据结构设计描述:(一)班级成绩管理系统(二)运动的时钟六、源程序代码(一) 班级成绩管理系统#include#define MaxSize 50struct student /声明结构体类型 struct student int num; /学号 char name8; /姓名 float chinese,math,english,politics;/语文、数学、
5、英语、政治四门课 float sum; /四门课总分;void input_student(); /成绩输入函数申明void show_student(); /成绩显示函数申明void sort_student(); /成绩修改函数申明void update_student(); /成绩排序函数申明void statistics_student(); /成绩统计函数申明int count=0; /记录当前录入信息的学生人数struct student stuMaxSize; /定义结构体数组/显示主菜单void print_menu() printf(n); printf(n); printf
6、(n); printf(n); printf( *您好,欢迎使用班级成绩管理系统*n); printf( # #n); printf( # 1.成绩录入 #n); printf( # 2.成绩显示 #n); printf( # 3.成绩排序 #n); printf( # 4.成绩修改 #n); printf( # 5.成绩统计 #n); printf( # 0.退出系统 #n); printf( # #n); printf( *n);int main() int mima; int yonghu; print_menu(); printf( 请输入用户名:); scanf(%d,&yonghu
7、); if(yonghu=1305110050) printf( 请输入密码:); scanf(%d,&mima); if(mima=123456); int choice; do print_menu(); scanf(%d,&choice); switch(choice) case 1:input_student();break; /调用input_student函数 case 2:show_student();break; /调用show_student 函数 case 3:sort_student();break; /调用sort_student 函数 case 4:update_st
8、udent();break; /调用update_student函数 case 5:statistics_student();break;/调用statistics_student函数 case 0:break; while(choice!=0); printf(END!n); /非法输入则跳出菜单 return 0;/录入学生成绩void input_student() struct student s; /定义结构体变量 if(count=MaxSize) printf(内存已满!n); return ; printf(学号tt姓名t语文t数学t英语t政治四门课的成绩n); scanf(%
9、d %s %f %f %f %f,&s.num,&s.name,&s.chinese,&s.math,&s.english,&s.politics); s.sum=s.chinese+s.math+s.english+s.politics; /计算当前每个学生的总分 stucount=s; count+; /当前录入信息的学生人数/显示学生成绩void show_student() int i; if(count=0) printf(没有信息可供查询!n); return ; printf(学号tt姓名t语文t数学t英语t政治n); for(i=0;icount;i+) printf(%dt%
10、st%2.2ft%2.2ft%2.2ft%2.2f,stui.num,stui.name,stui.chinese,stui.math,stui.english,stui.politics); /输出相应的信息 printf(n); /将学生成绩排序void sort_student() int i,j; struct student s; float grade50; /定义新数组 if(count=0) printf(没有存储信息,无法进行排序,请返回主菜单录入信息!n); return ; for(i=0;icount;i+) gradei=stui.sum; /提取结构体数组里的信息
11、for(i=0;icount-1;i+) /进行总分排序 for(j=0;jgradej) s=stuj+1; stuj+1=stuj; stuj=s; printf(学号t姓名t总分n); for(i=0;icount;i+) /输出已排好序的成绩 printf(%dt%st%3.2fn,stui.num,stui.name,stui.sum); printf(n); return ;/修改学生成绩void update_student() int course,i; char num; float score; printf(请输入学号进行修改:); scanf(%d,&num); for
12、(i=0;icount;i+) if(stui.num=num) break; if(icount) do printf(请选择课程:1.语文t2.数学t3.英语t4.政治t0.退出:); scanf(%d,&course); if(course=0) break; printf(请输入新成绩:); scanf(%f,&score); switch(course) case 1:stui.chinese=score;break; /把输入的分数赋值给结构体数组里的成员 case 2:stui.math=score;break; case 3:stui.english=score;break;
13、case 4:stui.politics=score;break; while(1); printf(修改后的成绩为:n); printf(numtchinesetmathtenglishtpoliticsn); /输出科目 printf(%dt%6.2ft%6.2ft%6.2ft%6.2fn,stui.num,stui.chinese,stui.math,stui.english,stui.politics); /输出成绩 else printf(没有找到要修改的学号n);/统计学生成绩void statistics_student() int i; float sum1=0,sum2=0,
14、sum3=0,sum4=0,aver1,aver2,aver3,aver4; for(i=0;icount;i+) /计算当前每个学生单门科目的总分(以下printf语句之前同是) sum1=sum1+stui.chinese; aver1=sum1/count; for(i=0;icount;i+) sum2=sum2+stui.math; aver2=sum2/count; for(i=0;icount;i+) sum3=sum3+stui.english; aver3=sum3/count; for(i=0;icount;i+) sum4=sum4+stui.politics; aver
15、4=sum4/count; /计算当前每个学生的平均成绩 printf(课程t平均分n); printf(chineset%6.2fn ,aver1); /输出当前每个学生的各科平均分(以下同是) printf(matht%6.2fn,aver2); printf(englisht%6.2fn,aver3); printf(politics%6.2fn,aver4); return ;(2)运动的时钟说明:在运行程序前,先将文件夹中名字为ud.jpg的文件存入D盘,因为在程序运行时会调用。#include #include #include #include #define PI 3.1415
16、926 /定义pi/* 出时钟的表盘 */ void Drawbiaopan() /画表盘 setwritemode(TRANSPARENT); int i; int x1, y1, x2, y2, x3, y3, x4, y4, x5, y5; /表心坐标系坐标 char rome3= 12,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ; /表盘数字 setcolor(GREEN); /画四个圆 circle(350, 350, 300); circle(350, 350, 30); circle(350, 350, 280); circle(350, 350, 27
17、0); for(i = 0; i 59; i+) / 画60条短线 setcolor(RED); x1 = (int)(350 + (sin(i * PI / 30) * 250); y1 = (int)(350 - (cos(i * PI / 30) * 250); x2 = (int)(350 + (sin(i * PI / 30) * 260); y2 = (int)(350 - (cos(i * PI / 30) * 260); line(x1, y1, x2, y2); setfillstyle(BLACK); /设置当前填充模式 画12个三角形 if(i % 5 = 0) x3 =
18、 (int)(x1 + sin(i + 5) * PI / 30) * 12 ); y3 = (int)(y1 - cos(i + 5) * PI / 30) * 12 ); x4 = (int)(x1 + sin(i - 5) * PI / 30) * 12 ); y4 = (int)(y1 - cos(i - 5) * PI / 30) * 12 ); x5 = (int)(340 + (sin(i - 0.2) * PI / 30) * 220); y5 = (int)(340 - (cos(i - 0.2) * PI / 30) * 220); int triangle6 = x1,
19、y1, x3, y3, x4, y4; setcolor(BLACK); fillpoly(3, triangle); /画填充的多边形 setbkmode(TRANSPARENT); / 设置背景混合模式 setcolor(RED); /写表盘数字 setfont(24, 0,); outtextxy(x5 , y5, romei / 5); /*画出时针、分针、秒针(以直线来表示)*/void Drawzhizheng(int hour, int minute, int second) /画指针 int xhour, yhour, xminute, yminute, xsecond, ys
20、econd; /表心坐标系指针坐标 / 对时针、分针、秒针的位置进行计算 xhour = (int)(130 * sin( hour * PI / 6 + minute * PI / 360 + second * PI / 1800); yhour = (int)(130 * cos( hour * PI / 6 + minute * PI / 360 + second * PI / 1800); xminute = (int)(145 * sin( minute * PI / 30 + second * PI / 1800); yminute = (int)(145 * cos( minut
21、e * PI / 30 + second * PI / 1800); xsecond = (int)(200 * sin( second * PI / 30); ysecond = (int)(200 * cos( second * PI / 30); setlinestyle(PS_SOLID,7,NULL, 10); /画时针 setcolor(LIGHTGRAY); line(350 + xhour, 350 - yhour, 350 -xhour / 6, 350 + yhour / 6); setlinestyle(PS_SOLID, 5,NULL, 7); /画分针 setcolo
22、r(RGB(222, 158, 107); line(350 + xminute, 350 - yminute, 350 -xminute / 4, 350 + yminute / 4); setlinestyle(PS_SOLID, 3,NULL, 3); /画秒针 setcolor(RED); line(350 + xsecond, 350 - ysecond, 350 -xsecond / 3, 350 + ysecond / 5); int main(void) /函数原型声明 void Drawbiaopan(); void Drawzhuangshi(); void Drawzhi
23、zheng(int hour, int minute, int second); initgraph(1000, 1000); /初始化600600的绘图窗口 setbkcolor(RGB(245, 247, 222); /设置背景色 cleardevice(); /清空屏幕 int gdriver=700,gmode=700; initgraph(gdriver,gmode); loadimage(NULL,D:123.jpg,700,700); Drawbiaopan(); /画表盘 setcolor(BLUE); /在表盘上加上字 setfont(32, 0, 华文新魏); outtex
24、txy(300, 220, 皮卡丘); setwritemode(R2_XORPEN); /设置异或绘图方式 SYSTEMTIME t; /定义变量保存当前时间 while(!kbhit() GetLocalTime(&t); /获取当前时间 Drawzhizheng(t.wHour, t.wMinute, t.wSecond); /画表针 Sleep(1000); Drawzhizheng(t.wHour, t.wMinute, t.wSecond); /擦表针 closegraph(); /关闭绘图窗口 return 0; 七、运行结果(一)1、主界面2、成绩录入3、成绩输出4、成绩排序5
25、、成绩统计(二)、运动的时钟八、出现的问题以及解决方法1、问题:在本实验室中用Turbo C进行此题目实验,系统环境不配套。解决方法:(1)、使用其他系统环境。(2)、下载EasyX库。EasyX 是针对 C+的图形库,可以帮助 C 语言初学者快速上手图形和游戏编程。EasyX 20140321(beta)(上为下载地址)EasyX安装说明:系统支持操作系统版本:Windows 2000 及以上操作系统。编译环境版本:Visual C+ 6.0 / Visual C+ 2008 2013(x86 & x64)。安装请先将下载的压缩包解压缩,然后执行 Setup.hta,并跟随提示安装。安装程序
26、会检测您已经安装的 VC 版本,并根据您的选择将对应的 .h 和 .lib 文件安装至 VC 的 include 和 lib 文件夹内。安装程序不会修改注册表或者您本机的任何文件。如果您需要手动安装,请根据下面的文件列表说明将安装包里的相关文件分别拷贝到 VC 对应的 include 和 lib 文件夹内,或者将 include 和 lib 文件夹放到任意位置,然后修改 VC 中的 Lib 和 Include 的引用路径。卸载由于安装程序并不改写注册表,因此您在“添加删除程序”中不会看到 EasyX 的卸载项。如需卸载,请执行相应版本的 Setup.hta,并根据提示卸载。也可以手动将相关的 .h 和 .lib 删除,系统中不会残留任何垃圾信息。文件列表说明下载的压缩包里文件列表及对应说明如下: include easyx.h / 头文件 graphics.h/ 头文件(模拟 BGI 绘图库) lib amd64 easyx.lib / VC2008 2013 MBCS 库文件(x64) easyxw.lib/ VC2008 2013 Unicode 库文件(x64) easyx6.lib/ VC6 MBCS 库文件 easyxw6.lib / VC6 Unicode 库文件 easyx.lib
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1