双非普通一本大一学生学期末课设——运动会比赛计分系统

双非普通一本大一学生学期末课设——运动会比赛计分系统

并没有做文件系统…只能将就的看一下,也没有结构体

做的很粗糙,很烂,就是发出来纪念一下。
感觉有点像堆出来的一坨屎,但是好歹是自己儿子,为我的代码自豪

题目要求:初始化输入:N-参赛学校总数,M-男子竞赛项目数,W-女子竞赛项目数
各项目名次取法有如下几种:
取前5名:第一名得分7分,第二名得分5,第三名得分3,第四名得分2,第五名得分1;取前3名:第一名得分5,第二名得分3,第三名得分2;
功能要求:
(1)系统以菜单方式工作
(2)由程序提醒用户填写比赛结果,输入各项目获奖运动员信息。
(3)所有信息记录完毕后,用户可以查询各个学校的比赛成绩。
(4)查看参赛学校信息和比赛项目信息等。

#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<stdlib.h>

int MainMenu();				//主菜单显示与选择函数
int sca();					//输入函数 返回输入的值
	int N, M, W, choice;
	int YoN=0;
	char name[100][20];		//学校名称
	int i=1,j,k,q;			//一些常用的无关的变量
	char* p;				//定义关于name[100][20]的指针变量
	int *pp,*on,*tw,*th,*fo,*fi;		//定义获奖数量指针变量,对应12345名
	int points[100]={0};			//纪录积分
	int one[100]={0};				//第一名获奖数量
	int two[100]={0};				//第二名获奖数量
	int three[100]={0};				//第三名获奖数量
	int four[100]={0};				//第四名获奖数量
	int five[100]={0};				//第五名获奖数量
	char projectM[100][20]={0};		//男子项目名称 
	char projectW[100][20]={0};		//女子项目名称 
	int projectM_school[100][5]={0};		//男子项目获奖学校记录 
	int projectW_school[100][5]={0};		//女子项目名称学校记录 
	char *pM;						//男子项目名称指针
	char *pW;						//女子项目名称指针
	int modeM[100];					//男子项目计分模式纪录  0为取前三名,1为取前5名
	int modeW[100];					//女子项目计分模式纪录

int main() {				//***********主函数************
	system("mode con cols=150 lines=50");	//调整控制台的长款 宽度150 高度30

	p = name[0];

	pp=points,on=one,tw=two,th=three,fo=four,fi=five;	//定义指针变量方便修改数组内的值
	
	pM=projectM[0];
	pW=projectW[0];

	printf("欢迎进入运动会比赛计分系统\n");		//欢迎界面标题
	system("pause");		//按任意键继续
	do{
		system("cls");		//清屏
		printf("请先分别输入参赛学校总数,男子竞赛项目数,女子竞赛项目数:");
		N = sca();			//输入参赛学校总数
		M = sca();			//输入男子竞赛项目数
		W = sca();			//输入女子竞赛项目数
		printf("输入后便不可更改,确定要继续吗?\n按1选择继续,按其他数字键选择重新输入:");
		scanf("%d",&YoN);
	}while(YoN!=1);
	choice = MainMenu();	//主菜单显示与选择函数
	while (choice <=3||choice>=1) {				//根据在主菜单里选择的数字进入相应的选项
		switch (choice) {
			//↓↓↓学校名称输入↓↓↓
			case 1: {
				system("cls");					//清屏
				printf("请依次输入学校名称\n");
				for (i = 0; i < N; i++) {		//依次输入学校名称
					printf("%d:", i + 1);		//学校名称前的序号
					gets(name[i]);				//通过循环依次输入学校的名字
					fflush(stdin);				//清除缓冲区剩余的内容,防止多输入
				}
				break;
			}//↑↑↑学校名称输入↑↑↑

			//↓↓↓男子项目获奖输入↓↓↓
			case 2: {
				system("cls");
				for(i=0;i<M;i++){
					if(i==0)
						printf("请依次输入男子项目奖项获得的学校\n");			//只在第一行输出这段话
					printf("男子第%d个项目:\n",i+1);		//项目显示编号比实际编号大1
					printf("请输入排名方式(1.三名制2.五名制):\n");
					int mode=1;			//定义控制三名制or五名制的变量
					scanf("%d",&mode);
					if(mode>2||mode<1){			//防止输入错误	
						printf("输入有误,请重新输入:\n");
						scanf("%d",&mode);
					}
					printf("请输入男子第%d个项目的名称:",i+1);
					fflush(stdin);				//清除缓冲区剩余的内容,防止多输入
					gets(projectM[i]);			//输入男子第i+1个项目的名称
					fflush(stdin);
					switch (mode) {
						case 1: {		//取前三名次制
							modeM[i]=0;
							for(j=0;j<3;j++){
								for (k = 0; k < N; k++) {			//依次显示学校名称
									printf("%-2d:",k+1);
									printf("%-20s", p + k * 20);	//+字符长度20即显示下一个名称
									if((k+1)%5==0)					//每行5个学校名字
										printf("\n");
									if((k+1)==N&&(k+1)%5==0)		//输出到最后一个学校换行,除了5的倍数
										printf("\n");
								}
								printf("请选择获得第%d名的学校是:",j+1);
								scanf("%d",&q);	//输入提示学校名称的头部编号
								int mlgb;
								mlgb=q-1;		//mlgb为实际的学校编号
								while(q>N||q<1){		//输错纠错
									printf("这也能输错?请输入正确的数");
									scanf("%d",&q);
								}
								if(j==0){				//第一名
									*(pp+mlgb)+=5;		//修改数组中的值-累加积分
									*(on+mlgb)+=1;		//累加获奖数量
									projectM_school[i][j]=mlgb;		//纪录获奖学校,重申:i为男子项目号,j为男子项目获奖名次,mlgb为选中的实际学校编号
								}
								else if(j==1){			//第二名
									*(pp+mlgb)+=3;
									*(tw+mlgb)+=1;
									projectM_school[i][j]=mlgb; 
								}
								else{					//第三名
									*(pp+mlgb)+=2;
									*(th+mlgb)+=1;
									projectM_school[i][j]=mlgb; 
								}
							}
							break;
						}
						case 2:{				//取前五名次制  和取前三名制的区别只有多输入2名
							modeM[i]=1;
							for(j=0;j<5;j++){
								for (k = 0; k < N; k++) {
									printf("%-2d:",k+1);
									printf("%-20s", p + k * 20);
									if((k+1)%4==0)
										printf("\n");
									if((k+1)==N)
										printf("\n");	
								}
								printf("请选择获得第%d名的学校是:",j+1);
								scanf("%d",&q);
								int mlgb;
								mlgb=q-1;
								while(q>N||q<1){
									printf("这也能输错?请输入正确的数");
									scanf("%d",&q);}
								if(j==0){				//可优化  但是这样简单直白
									*(pp+mlgb)+=7;
									*(on+mlgb)+=1;
									projectM_school[i][j]=mlgb;
								}
								else if(j==1){
									*(pp+mlgb)+=5;
									*(tw+mlgb)+=1;
									projectM_school[i][j]=mlgb;
								}
								else if(j==2){
									*(pp+mlgb)+=3;
									*(th+mlgb)+=1;
									projectM_school[i][j]=mlgb;
								}
								else if(j==3){
									*(pp+mlgb)+=2;
									*(fo+mlgb)+=1;
									projectM_school[i][j]=mlgb;
								}
								else if(j==4){
									*(pp+mlgb)+=1;
									*(fi+mlgb)+=1;
									projectM_school[i][j]=mlgb;
								}
								}
							}
							break;
						}
					}
				system("cls");
				break;
			}//↑↑↑男子项目获奖输入↑↑↑

			//↓↓↓女子项目获奖输入↓↓↓
			case 3: {			//和男子项目获奖输入的区别只有把所有M改成W----本项所有注释参照男子项目获奖输入
				system("cls");
				for(i=0;i<W;i++){
					if(i==0)
						printf("请依次输入女子项目奖项获得的学校\n");
					printf("女子第%d个项目:\n",i+1);
					printf("请输入排名方式(1.三名制2.五名制):");
					int mode=1;
					scanf("%d",&mode);
					if(mode>2||mode<1){
						printf("输入有误,请重新输入:\n");
						scanf("%d",&mode);
					}
					printf("请输入女子第%d个项目的名称:",i+1);
					fflush(stdin);
					gets(projectW[i]);
					fflush(stdin);
					switch (mode) {
						case 1: {			//取前三名次制
							modeW[i]=0;
							for(j=0;j<3;j++){			
								for (k = 0; k < N; k++) {		
									printf("%-2d:",k+1);
									printf("%-20s", p + k * 20);
									if((k+1)%4==0)
										printf("\n");
									if((k+1)==N)
										printf("\n");
								}
								printf("请选择获得第%d名的学校是:",j+1);
								scanf("%d",&q);
								int mlgb;
								mlgb=q-1;				
								while(q>N||q<1){
									printf("这也能输错?请输入正确的数");
									scanf("%d",&q);
								}
								if(j==0){				
									*(pp+mlgb)+=5;		
									*(on+mlgb)+=1;
									projectW_school[i][j]=mlgb;
								}
								else if(j==1){
									*(pp+mlgb)+=3;
									*(tw+mlgb)+=1;
									projectW_school[i][j]=mlgb;
								}
								else{
									*(pp+mlgb)+=2;
									*(th+mlgb)+=1;
									projectW_school[i][j]=mlgb;
								}
							}
							break;
						}
						case 2:{			//取前五名次制
							modeW[i]=1;
							for(j=0;j<5;j++){			
								for (k = 0; k < N; k++) {
									printf("%-2d:",k+1);
									printf("%-20s", p + k * 20);
									if((k+1)%4==0)
										printf("\n");
									if((k+1)==N)
										printf("\n");
								}
								printf("请选择获得第%d名的学校是:",j+1);
								scanf("%d",&q);
								int mlgb;
								mlgb=q-1;
								while(q>N||q<1){
									printf("这也能输错?请输入正确的数");
									scanf("%d",&q);}
								if(j==0){				
									*(pp+mlgb)+=7;
									*(on+mlgb)+=1;
									projectW_school[i][j]=mlgb;
								}
								else if(j==1){
									*(pp+mlgb)+=5;
									*(tw+mlgb)+=1;
								projectW_school[i][j]=mlgb;
								}
								else if(j==2){
									*(pp+mlgb)+=3;
									*(th+mlgb)+=1;
								projectW_school[i][j]=mlgb;
								}
								else if(j==3){
									*(pp+mlgb)+=2;
									*(fo+mlgb)+=1;
								projectW_school[i][j]=mlgb;
								}
								else if(j==4){
									*(pp+mlgb)+=1;
									*(fi+mlgb)+=1;
								projectW_school[i][j]=mlgb;
								}
								}
							}
							break;
						}
					}
				system("cls");

				break;
			}//↑↑↑女子项目获奖输入↑↑↑

			//↓↓↓学校积分榜↓↓↓
			case 4: {
				for (i = 0; i < N; i++) {	//依次显示学校名称
					if(i==0)
						printf("学校名称            积分  第一名  第二名  第三名  第三名  第五名\n");
					printf("%d:",i+1);		//字符串的长度为10
					printf("%-20s", p + i * 20);			//学校名称  字符长度20
					printf("%-6d",points[i]);				//积分
					printf("%-8d",one[i]);					//第一名数量
					printf("%-8d",two[i]);					//第二名数量
					printf("%-8d",three[i]);				//同上...
					printf("%-8d",four[i]);
					printf("%-8d",five[i]);
					printf("\n");
				}
				system("pause");

				break;
			}//↑↑↑学校积分榜↑↑↑

			//↓↓↓各学校获奖项目及获奖名次↓↓↓
			case 5: {		//查看各学校获奖项目及获奖名次
				system("cls");
				printf("请输入要查看学校的序号");
				for (k = 0; k < N; k++) {			//依次显示学校名称
					printf("%-2d:",k+1);
					printf("%-20s", p + k * 20);	//+字符长度20即显示下一个名称
					if((k+1)%5==0)					//每行5个学校名字
						printf("\n");
					if((k+1)==N&&(k+1)%5==0)		//输出到最后一个学校换行,除了5的倍数
						printf("\n");
				}
				scanf("%d",&q);
				int mlgb;
				mlgb=q-1;
				printf("男子项目:\n");
				for(i=0;i<M;i++){
					for(j=0;j<5;j++){
						if(projectM_school[i][j]==mlgb){		//i为项目号,j为名次编号,此为男子项目
							printf("%-20s",projectM[i]);
							printf("第%d名",j+1);
						}
					}
				}
				printf("女子项目:\n");
				for(i=0;i<W;i++){
					for(j=0;j<5;j++){
						if(projectW_school[i][j]==mlgb){		//i为项目号,j为名次编号,此为女子项目
							printf("%-20s",projectW[i]);
							printf("第%d名\n",j+1);
						}
					}
				}
				system("pause");
				break;
			}//↑↑↑各学校获奖项目及获奖名次↑↑↑

			//↓↓↓各项目获奖学校名次↓↓↓
			case 6: {		//查看各项目获奖学校名次--输入男子/女子项目编号来查看
				system("cls");
				printf("要查看男子或女子项目-男子请输入1,女子请输入2\n");
				scanf("%d",&q);			
				if(q>2||q<1){			//错误纠正
					printf("请输入正确的数:");
					scanf("%d",&q);
				}
				switch (q) {
					case 1:{
						for(q=0;q<M;q++){		//反正switch中的q用完就扔掉,懒得想了,重复利用,环保
							printf("%d:",q+1);
							printf("%-20s", pM + q * 20);		//输出男子项目的名称
						}
						printf("请输入要查看的项目编号\n");
						scanf("%d",&i);
						if(i>M||i<1){		//此处的i为项目真正编号+1
							printf("请输入正确的数:");
							scanf("%d",&i);
						}
						int mlgb;		//此变量为懒得想专属工具变量
						mlgb=i-1;
						//*********输出部分*********
						system("cls");
						if(modeM[mlgb]==0){
							printf("%s获奖情况\n", pM + mlgb * 20);
							printf("第一名:%s\n",name[projectM_school[mlgb][0]]);
							printf("第二名:%s\n",name[projectM_school[mlgb][1]]);
							printf("第三名:%s\n",name[projectM_school[mlgb][2]]);
						}
						else{
							printf("%s获奖情况\n", pM + mlgb * 20);
							printf("第一名:%s\n",name[projectM_school[mlgb][0]]);
							printf("第二名:%s\n",name[projectM_school[mlgb][1]]);
							printf("第三名:%s\n",name[projectM_school[mlgb][2]]);
							printf("第四名:%s\n",name[projectM_school[mlgb][3]]);
							printf("第五名:%s\n",name[projectM_school[mlgb][4]]);
						}
						system("pause");
						//*********输出部分*********
						break;
					}
					case 2:{		//和男子的区别只有把M改成W
						for(q=0;q<W;q++){		//输出女子项目的标号及名称
							printf("%d:",q+1);
							printf("%-20s", pW + q * 20);		
						}
						printf("请输入要查看的项目编号\n");
						scanf("%d",&i);
						if(i>W||i<1){
							printf("请输入正确的数:");
							scanf("%d",&i);
						}
						int mlgb;
						mlgb=i-1;
						system("cls");
						if(modeW[mlgb]==0){
							printf("%s获奖情况\n", pW + mlgb * 20);
							printf("第一名:%s\n",name[projectW_school[mlgb][0]]);
							printf("第二名:%s\n",name[projectW_school[mlgb][1]]);
							printf("第三名:%s\n",name[projectW_school[mlgb][2]]);
						}
						else{
							printf("%s获奖情况\n", pW + mlgb * 20);
							printf("第一名:%s\n",name[projectW_school[mlgb][0]]);
							printf("第二名:%s\n",name[projectW_school[mlgb][1]]);
							printf("第三名:%s\n",name[projectW_school[mlgb][2]]);
							printf("第四名:%s\n",name[projectW_school[mlgb][3]]);
							printf("第五名:%s\n",name[projectW_school[mlgb][4]]);
						}
						system("pause");
						break;
					}
				}
				break;
			}//↑↑↑各项目获奖学校名次↑↑↑
			case 7: {		//退出程序
				return 0;	
			}
		}
		choice = MainMenu();
	}
	return 0;
}

int MainMenu() {		//主菜单显示与选择
	int choice;
	system("cls");
	printf("                   运动会比赛计分系统\n");
	printf("**************************主菜单****************************\n");
	printf("||               输入数字标号以进入相应选项               ||\n");
	printf("||                   1:录入学校名称                       ||\n");
	printf("||                   2:男子比赛结果录入                   ||\n");
	printf("||                   3:女子比赛结果录入                   ||\n");
	printf("||                   4:查看各学校积分及获奖数             ||\n");
	printf("||                   5:查看各学校获奖项目及获奖名次       ||\n");
	printf("||                   6:查看各项目获奖学校名次             ||\n");
	printf("||                   7:退出程序                           ||\n");
	printf("************************************************************\n");
	printf("选择相应数字进入>>>>");
	scanf("%d", &choice);		//输入选择的标号
	fflush(stdin);
	while (choice < 1 || choice > 7) {
		printf("错误,请输入正确的数\n");
		scanf("%d", &choice);
		fflush(stdin);
	}
	return choice;		//返回选择值后输入switch函数进去下一菜单
}

int sca() {				//输入数的函数(其实并没有省掉很多工作量或者空间)
	int n;
	scanf("%d", &n);
	if(n<0){
		printf("输入有误,请重新输入");
		scanf("%d", &n);
	}
	return n;
}
				//先保留备用,看的清楚,一目了然
				//printf("%d\n",projectM_school[0][0]);
				//printf("%d\n",projectM_school[0][1]);
				//printf("%d\n",projectM_school[0][2]);
				//printf("%s\n",name[projectM_school[i][0]]);			//[projectM_school[i][j]]为纪录的项目排名的学校号
				//printf("%s\n",name[projectM_school[i][1]]);
				//printf("%s\n",name[projectM_school[i][2]]);
				//printf("%-20s", pM + i * 20);		//控制i来进一步控制projectM[100][20](男子项目名称)的输出
				//scanf("%d",&i);
				//printf("%-20s", pM + i * 20);

主要的功能是1.学校名称的输入2.按学校的比赛成绩录入3.比赛成绩的查看(包含按项目和按学校查看)

如果哪位大佬或者同样是要做这种课设同学看到了这篇文章,我会十分感动的。
哈哈哈哈哈哈感觉我这个代码也许蛮好懂的?
希望能为大家做出一点微薄的贡献,在CSDN上学到了那么多东西,无以为报,只希望通过把平时做的一些微不足道的小东西发上来,也许哪怕就对只能一个人能有那么一点点的帮助,那我也很开心了

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值