资源描述
中 国 地 质 大 学
本科生课程论文封面
课程名称 C语言课程设计
老师姓名 。。
本科生姓名 ,,
本科生学号 。。
本科生专业 。。
所在院系 资源学院
类别: 本科生
日期: 。。。
课程设计评语
对课程论文评语:
平时成绩:
课程论文成绩:
总 成 绩:
评阅人署名:
注:1、无评阅人署名成绩无效;
2、必需用钢笔或圆珠笔批阅,用铅笔阅卷无效;
3、如有平时成绩,必需在上面评分表中标出,并计算入总成绩。
目 录
课程设计评语 2
目 录 3
1.课程论文题目 4
2.程序设计思绪 4
3.功效模块图 4
4.数据结构设计 6
5.算法设计 7
6.程序代码 10
7.程序运行结果 15
8.编程中碰到困难及处理方法 17
9.总结心得及良好提议 18
10.致谢 18
课程论文题目
1.校际运动会管理系统
一、题目要求
(1)信息初始化
输入:N─参赛学校总数,M─男子竞赛项目数, W─女子竞赛项目数;
各项目名次取法有以下多个:
取前5名:第一名得分 7,第二名得分5,第三名得分3,第四名得分2,第五名得分1;
取前3名:第一名得分5,第二名得分3,第三名得分2;
用户自定义:各名次权值由用户指定。
(2)提醒用户填写比赛结果,输入各项目获奖运动员信息。
(3)全部信息统计完成后,用户能够查询各个学校比赛成绩,生成团体总分报表,察看参赛学校信息和比赛项目信息等。
2.程序设计思绪
依据题目要求应提供键盘式菜单实现功效选择,还应提供信息输入操作,因为在程序中提供查询功效所以应有显示、查找等操作。依据上面需求分析,能够将这个系统设计分为1、信息输入模块 2、比赛结果录入模块 3、查询模块。具体校际运动会管理系统分为 信息输入、结果输入、学校各个项目标得分查寻、总体报表生成。
3.功效模块图
(每个功效模块全部标注函数名称,如右图)
学校总数
男生项目数
信息输入
女生项目数
比赛结果录入
主函数
以学校检索
检索
以项目检索
以运动员检索
退出
4.数据结构设计
数据结构采取结构体形式,包含学校、项目、运动员三个结构体。比如学校结构体组员
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define A 100
int y=0,f=0,j,W,M,N,p[15],q[15];
struct student
{ char shool[20];
char name[20];
char item[20];
char sex;
int mingci;
int mark;
}stu[A];
struct item
{ char name[20];
char sex;
int mark;
}it[A];
struct shool
{ char name[20];
char item[20];
int mark;
}sho[A]
{
5.算法设计
1.主函数通常设计较为简练,只提供输入、功效处理和输出部分函数调用。其中各功效模块用菜单方法选择。另外菜单部分也能够写成函数。
显示一系列功效选项
输入n,判定n是否是1-4
N
依据n值调用各功效模块函数
图2 主函数步骤图
Y
[程序]
void main()
{void menu();
menu();
}
void menu()
{
void establish(),enter(),search();
int w1,n;
do{
puts("\t\t*****************MENU********************");
puts("\n\n\t\t 1.输入信息\n");
puts("\t\t 2.输入比赛结果\n");
puts("\t\t 3.查询比赛信息\n");
puts("\t\t 4.退出\n");
puts("\n\t\t*****************************************");
puts("\n\n请选择:");
scanf("%d",&n);}while(0);
switch(n)
{ case 1:establish();break;
case 2:enter();break;
case 3:search();break;
case 4:exit(0);
}
}各功效模块设计
(1) 信息输入模块
一是参赛学校信息,二是参赛运动员信息,三是比赛项目信息,分别输入并保留
信息输入
读入、显示参赛学校
读入、显示运动员
读入比赛项目
图3 信息输入模块步骤图
void establish()
{ void zidingyi();
int h,r; extern N,M,W;
y=1;
printf("\n请输入学校数量:");
scanf("%d",&N);
printf("\n请输入男运动员数量:");
scanf("%d",&M);
printf("\n请输入女运动员数量");
scanf("%d",&W);
printf("\n有三种权值取法,请选择:");
printf("\n\n\t1).第一名七分,第二名五分,第三名三分,第四名五分,第五名一分.");
printf("\n\n\t2).第一名五分,第二名三分,第三名一分.");
printf("\n\n\t3).由您自己定义.");
printf("\n\n请输入编号(1--3):");
scanf("%d",&h);
switch(h)
{case 1:j=1;break;
case 2:j=2;break;
case 3:zidingyi();
}
printf("设置成功\n按任意键会菜单");scanf("%d",&r);
menu();
}
(2) 结果录入模块
录入运动员比赛得分
图4 比赛结果录入模块步骤图
分析计算各学校总分
void enter()
{
int t,r,i=0;extern j,y;char F,M;
void mark(int j,int i);
do
{
printf("\n请输入运动员名字:");scanf("%s",&stu[i].name);
printf("\n请输入运动员学校:");scanf("%s",&stu[i].shool);
printf("\n请输入运动员项目:");scanf("%s",&stu[i].item);
printf("\n请输入运动员性别(m\w):\t");scanf("%s",&stu[i].sex);
printf("\n请输入名次:");scanf("%d",&stu[i].mingci);
mark(j,i);
loop_2:printf("\n\n继续输入码?\t1).Yes\t2).No\t");
scanf("%d",&t);
if(t==2)break;
i++;
}while(t==1);f=1;
printf("输入成功\n请按任意键退出");scanf("%d",&r);
menu();
}
(3)查询信息模块
[分析]
查询信息模块提供按不一样方法查询多种信息机返回功效,其中各功效模块用菜单方法选择。菜单部分也可写成函数。
6.程序代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define A 100
int y=0,f=0,j,W,M,N,p[15],q[15];
struct student
{ char shool[20];
char name[20];
char item[20];
char sex;
int mingci;
int mark;
}stu[A];
struct item
{ char name[20];
char sex;
int mark;
}it[A];
struct shool
{ char name[20];
char item[20];
int mark;
}sho[A];
void main()
{void menu();
menu();
}
void menu()
{
void establish(),enter(),search();
int w1,n;
do{
puts("\t\t*****************MENU********************");
puts("\n\n\t\t 1.输入信息\n");
puts("\t\t 2.输入比赛结果\n");
puts("\t\t 3.查询比赛信息\n");
puts("\t\t 4.退出\n");
puts("\n\t\t*****************************************");
puts("\n\n请选择:");
scanf("%d",&n);}while(0);
switch(n)
{ case 1:establish();break;
case 2:enter();break;
case 3:search();break;
case 4:exit(0);
}
}
void establish()
{ void zidingyi();
int h,r; extern N,M,W;
y=1;
printf("\n请输入学校数量:");
scanf("%d",&N);
printf("\n请输入男运动员数量:");
scanf("%d",&M);
printf("\n请输入女运动员数量");
scanf("%d",&W);
printf("\n有三种权值取法,请选择:");
printf("\n\n\t1).第一名七分,第二名五分,第三名三分,第四名五分,第五名一分.");
printf("\n\n\t2).第一名五分,第二名三分,第三名一分.");
printf("\n\n\t3).由您自己定义.");
printf("\n\n请输入编号(1--3):");
scanf("%d",&h);
switch(h)
{case 1:j=1;break;
case 2:j=2;break;
case 3:zidingyi();
}
printf("设置成功\n按任意键会菜单");scanf("%d",&r);
menu();
}
void enter()
{
int t,r,i=0;extern j,y;char F,M;
void mark(int j,int i);
do
{
printf("\n请输入运动员名字:");scanf("%s",&stu[i].name);
printf("\n请输入运动员学校:");scanf("%s",&stu[i].shool);
printf("\n请输入运动员项目:");scanf("%s",&stu[i].item);
printf("\n请输入运动员性别(m\w):\t");scanf("%s",&stu[i].sex);
printf("\n请输入名次:");scanf("%d",&stu[i].mingci);
mark(j,i);
loop_2:printf("\n\n继续输入码?\t1).Yes\t2).No\t");
scanf("%d",&t);
if(t==2)break;
i++;
}while(t==1);f=1;
printf("输入成功\n请按任意键退出");scanf("%d",&r);
menu();
}
void search()
{ int r; void search_school(),search_item();
int e;char c;extern f;
if(f==0)
{ printf("请先输入数据\n输入任意键退出..\n ");
scanf("%s",&c);
menu();
}
loop:printf("\n请选择检索类型:\n\t1).以学校检索\n\t2).以项目检索\n\t3).退出\t");
scanf("%d",&e);
switch(e)
{ case 1:search_school();{printf("输入成功\n请按任意键退出");scanf("%d",&r);
menu();}
case 2:search_item();{printf("输入成功\n请按任意键退出");scanf("%d",&r);
menu();}
case 3:menu();
}
}
void search_school()
{ void printf_one(),printf_face(),printf_sum();
int x,sum=0,w=0;
struct student s;
printf("\n请输入你要检索学校名字:");
scanf("%s",&s.shool);
printf_face();
for(x=0;x<A;x++)
if(strcmp(s.shool,stu[x].shool)==0)
{ sum+=stu[x].mark;
printf_one(x);w=1;
}
printf_sum(sum);
if(w==0)
{printf("\n\n*不存在此学校,请重新输入");search_school();}
}
void search_item()
{ void printf_one(),printf_face(),printf_sum();
int x,sum=0,w=0;
struct student s;
printf("\n请输入你要检索项目名:");
scanf("%s",&s.item);
printf_face();
for(x=0;x<A;x++)
if(strcmp(s.item,stu[x].item)==0)
{ sum+=stu[x].mark;
printf_one(x);w=1;
}
printf_sum(sum);
if(w==0)
{ printf("\n\n*不存在此项目,请重新输入");search_item();}
}
void mark(int j,int i)
{ int g; extern p[15],q[15];
if(j==1)
{if(stu[i].mingci==1)stu[i].mark=7;
else if(stu[i].mingci==2)stu[i].mark=5;
else if(stu[i].mingci==3)stu[i].mark=3;
else if(stu[i].mingci==4)stu[i].mark=2;
else if(stu[i].mingci==5)stu[i].mark=1;
}
if(j==2)
{ if(stu[i].mingci==1)stu[i].mark=5;
else if(stu[i].mingci==2)stu[i].mark=3;
else if(stu[i].mingci==3)stu[i].mark=1;
}
if(j==3)
{ for(g=0;g<15;g++)if(stu[i].mingci==p[g])stu[i].mark=q[g];}
}
void zidingyi()
{ static int p[15],q[15],a,b,j;
for(a=0;a<15;a++)
{ printf("\n请输入要定义名次:");scanf("%d",&p[a]);
printf("\n请输入该名次分值:");scanf("%d",&q[a]);
loop:printf("\n你还要继续定义吗?1).Yes\t2).No");scanf("%d",&b);
if(b==2)break;
if(b!=1)goto loop;
}
j=3;
}
void printf_one(int x)
{ printf("\n%-20s%-20s%-20s%-5c%-9d%-5d",stu[x].shool,stu[x].name,stu[x].item,stu[x].sex,stu[x].mingci,stu[x].mark);
}
void printf_sum(int sum)
{ printf("\n\n总分数是:\t %d",sum);
printf("\n学校总数是: \t%d",N);
printf("\n项目总数是: \t%d\n",W+M);
}
void printf_face()
{ printf("\n\n学校名 运动员名 项目 性别 名次 分数");
}}
}
7.程序运行结果【
(1) 主菜单函数
(2) 信息录入模块
(3) 查询子菜单
(4) 按学校名字查询信息
(5) 按项目查询项目信息
8.编程中碰到困难及处理方法
在学习C语言时,最初使用是Microsoft visual 6++计算机编程软件,但我们是使用C++Sourse File 编一个.c程序。而老师则要求我们使用工程MFC AppWizad exe 编程。这是c++里知识。尽管当初听老师讲c++和C语言有很多共同之处,但我们还是无从下手。以后老师把程序发该我们,让我们用.C编程就好多了。
在编程过程中,常常会在语句结束时少“;”或把汉字输入引号输入文件,极难发觉错误所在。
在编程题时也出现了部分编译中问题。比如,在开始未加头文件#include<string.h>造成有很多未定义errors;在输入字符串时用到“%S”,使功效无法输出。
因为原来题目要求较少,题目较简单,在编译时,我先根据题目要求将它编写好,以后又给它添加了很多功效。在帮同学修改程序过程中,也碰到过一个问题。在头文件后定义了子函数,可是以后忘了编写子函数,在纠错时,有是不会发觉错误,不过连接过程中就会汇报犯错。我认为在以后编程过程中,最好用什么函数写什么函数,后者在写完一个子函数后再在头文件底下申明。
9.总结心得及良好提议
C语言实习基础上由老师引导,自己很多全部靠自学,不明白问老师,自学能力得到了很大培养。在实习过程中,我感觉到一点,程序是不能一气呵成。最少一气呵成程序不会尽善尽美。程序编写要一步一步完成。首先,对于要编程序要有一个总体思绪。要明确想要什么。只要把思绪理清楚了,程序就好编写了。把程序分割成多个块,即多个函数,一块一块编写。然后将分散函数用另外函数连接起来或用main函数连接。到这一步,程序也就初步编成了,以后便是调试,检验错误。最终我认为还能够对于已经编写好程序进行部分修改添加,使它愈加人性化。优化程序阶段是很关键。
10.致谢
在C语言实习过程中,让我巩固了C语言基础知识,以前历来没有这么编过完整程序,实习让我有这么一个机会,自己独立编写程序。我认为自己说学东西不多,不过能够将它们利用出来。在实习过程中,首先我要感谢我老师,一个是带我走进C语言大门曹老师,因为她,我开始喜爱C语言,把所学知识掌握牢靠。同时,在这次实习中,樊老师对我帮助对我最难忘。题目本身是很简单,在老师教学风格影响下,我在编写完最初程序后,有自己添加了很多功效。在此,我要感谢她。最终,我还要感谢给我帮助同学,在部分程序问题上,我和同学交流经验,学到了很多在书本上学不到东西。
总而言之,我真诚感谢在这次实习中给过我帮助人!
展开阅读全文