双非普通一本大一学生学期末课设——运动会比赛计分系统
并没有做文件系统…只能将就的看一下,也没有结构体
做的很粗糙,很烂,就是发出来纪念一下。
感觉有点像堆出来的一坨屎,但是好歹是自己儿子,为我的代码自豪
题目要求:初始化输入: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上学到了那么多东西,无以为报,只希望通过把平时做的一些微不足道的小东西发上来,也许哪怕就对只能一个人能有那么一点点的帮助,那我也很开心了