作业要求
在作业一的基础上加入以下功能并添加菜单
数组功能基本功能菜单:
=====================================
作者:***
1. 建立成绩数组
2. 显示成绩数组
3. 按给定成绩查询
4. 按顺序号查询
5. 从高到低排序输出
6. 从低到高排序输出
7. 按给定顺序号插入成绩
8. 按给定顺序号删除成绩
9. 按给定顺序号修改成绩
0. 结束程序
======================================
作业内容
C语言程序设计菜单的制作只要使用到输入输出函数、循环(死循环)控制、多分支语句结构、跳转语句break和return和exit、系统擦屏、清除缓冲区、暂停等函数。
1)通过输出函数罗列出函数功能
printf("\t\t\t数组基本功能菜单\n");
printf("\t\t\t 作者:***\n");
printf("\t\t\t====================\n");
printf("\t\t\t 1. 建立成绩数组 \n");
printf("\t\t\t 2. 显示成绩数组 \n");
printf("\t\t\t 3. 按给定成绩查找 \n");
printf("\t\t\t 4. 按顺序号查询 \n");
printf("\t\t\t 5. 从高到低排序输出 \n");
printf("\t\t\t 6. 从低到高排序输出 \n");
printf("\t\t\t 7. 按给定顺序号插入成绩 \n");
printf("\t\t\t 8. 按给定顺序号删除成绩 \n");
printf("\t\t\t 9. 按给定顺序号修改成绩 \n");
printf("\t\t\t 0. 结束程序 \n");
printf("\t\t\t====================\n\n");</span>
2)通过输入函数进行选择
printf("\t\t\t请输入您的选择:");
scanf("%d",&choice);
3)利用多分支语句,根据2)选择进行相应功能的调用
switch(choice) //根据用户选择进行相应操作
{
case 1: printf(“模拟创建成绩数组\n”); break;
case 2: printf(“模拟显示成绩数组\n”); break;
case 3: printf(“模拟按给定成绩查找\n”); break;
case 4: printf(“模拟按顺序号查询\n”); break;
case 5: printf(“模拟从高到低排序输出\n”); break;
case 6: printf(“模拟从低到高排序输出\n”); break;
case 7: printf(“模拟按给定顺序号插入成绩\n”); break;
case 8: printf(“模拟按给定顺序号删除成绩\n”); break;
case 9: printf(“模拟按给定顺序号修改成绩\n”); break;
case 0: printf("欢迎你再次使用,再见!\n"); exit(0);
default : printf("\n 对不起,您的选择有误,请重新输入!!!\n");
}
4)暂停、擦屏
system("pause");
system("cls");
5)通过死循环结构将上述语句只为循环体滚动显示菜单
do
{
}while(1);
或
while(1)
{ }
/********************************头文件,宏定义,全局变量********************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define S 31
int i,j; //************************************用于循环
int ST_NUM=0,c/*存储要删除的学生的名次*/,flag=0/*找到时的标志*/;
/********************************结构体***************************************************/
typedef struct
{
char num[13];
char name[9];
char sex[3];
float match;
float english;
float c_language;
float physical;
float modern_history;
float introduction_to_computer_science;
float sum;
float average;
}student;
/********************************结构体数组***********************************************/
student ST[S];
/*******************************输入*****************************************************/
void input()
{
printf ("十位学号:");
scanf ("%s",ST[i].num);
printf("姓名:");
scanf ("%s",ST[i].name);
printf("性别:");
scanf("%s",ST[i].sex);
printf("科目数学的成绩:");
scanf("%f",&ST[i].match);
printf("科目英语的成绩:");
scanf("%f",&ST[i].english);
printf("科目c语言的成绩:");
scanf("%f",&ST[i].c_language);
printf("科目体育的成绩:");
scanf("%f",&ST[i].physical);
printf("科目近代史的成绩:");
scanf("%f",&ST[i].modern_history);
printf("科目计算机导论的成绩:");
scanf("%f",&ST[i].introduction_to_computer_science);
system("cls");
}
/*******************************加和,平均***********************************************/
void average()
{
for(i=0;i<ST_NUM;i++)
{
ST[i].sum=ST[i].match+ST[i].english+ST[i].c_language+ST[i].physical+ST[i].modern_history+ST[i].introduction_to_computer_science;
ST[i].average=ST[i].sum/6;
}
}
/*******************************冒泡法排序***********************************************/
void sort()
{
student tstu;
for(i=0;i<ST_NUM;i++)
{
for(j=ST_NUM-1;j>i;j--)
{
if(ST[j].sum>ST[j-1].sum)
{
tstu=ST[j]; ST[j]=ST[i]; ST[i]=tstu;
}
}
}
}
/******************************1.输入学生成绩,加和,平均*********************************/
void inputscore()
{ if(ST_NUM==0)
{
printf("请输入学生总数:");
scanf("%d",&ST_NUM);
for(i=0;i<ST_NUM;i++)
{
printf("\n");
printf("请输入第%d个学生的信息:\n",i+1);
input();
}
average();
printf("\n:)创建成功!\n");
}
else
printf("\t初始数组已创建,无法第二次创建,\n\t您可以尝试添加功能,祝您使用愉快!:)\n");
}
/********************************输出数据*************************************************/
void output()
{
printf("%s\t\%s\t%s\t",ST[i].num,ST[i].name,ST[i].sex);
printf("%3.2f\t",ST[i].match);
printf("%3.2f\t",ST[i].english);
printf("%3.2f\t",ST[i].c_language);
printf("%3.2f\t",ST[i].physical);
printf("%3.2f\t",ST[i].modern_history);
printf("%3.2f\t",ST[i].introduction_to_computer_science);
printf("%3.2f\t%3.2f\n",ST[i].sum,ST[i].average);
}
/********************************输出表头*************************************************/
void output2()
{
if(flag==0)
{
printf("学号\t\t姓名\t性别\t");
printf("数学\t英语\tc语言\t体育\t近代史\t计算机\t总分\t平均分\n");
flag=1; //****************相同时,表头只输出一次,数据数组循环输出
}
}
/******************************2.显示学生成绩********************************************/
void outputscore()
{
flag=0;
if(ST_NUM!=0)
{
for (i=0;i<ST_NUM;i++)
{
output2();
output();
}
}
else
printf("(⊙︿⊙)数组尚未创建!\n");
}
/******************************3.按总成绩查找********************************************/
void scoresearch()
{
flag=0;
float s;
if(ST_NUM!=0)
{
printf ("请输入总成绩以查询:");
scanf("%f",&s);
for(i=0;i<ST_NUM;i++)
{
if(ST[i].sum==s)
{
output2();
output();
}
else
if(i==ST_NUM-1)
if(flag==0)
printf("(⊙︿⊙)未找到!\n");
}
}
else
printf("(⊙︿⊙)数组尚未创建!\n");
}
/******************************4.按学号查找**********************************************/
void numbersearch()
{
flag=0;
char a[13];
if(ST_NUM!=0)
{
printf("请输入学号以查询:\n");
scanf("%s",a);
for(i=0;i<ST_NUM;i++)
{
if(strcmp(a,ST[i].num)==0)
{
output2();
c=i; //*********************************存储要删除的学生的名次
output();
break; //****************************************默认无相同学号
}
else
if(i==ST_NUM-1)
printf("(⊙︿⊙)未找到,请确认输入无误!\n");
}
}
else
printf("(⊙︿⊙)数组尚未创建!\n");
}
/******************************5.从高到低排序输出***************************************/
void order()
{
flag=0;
if(ST_NUM!=0)
{
sort();
outputscore();
}
else
printf("(⊙︿⊙)数组尚未创建!\n");
}
/******************************6.从低到高排序输出****************************************/
void reverse()
{
flag=0;
if(ST_NUM!=0)
{
sort();
for(i=ST_NUM-1;i>=0;i--)
{
output2();
output();
}
}
else
printf("(⊙︿⊙)数组尚未创建!\n");
}
/******************************7.按给定学号添加成绩**************************************/
void add()
{
flag=0;
int a,b;
if(ST_NUM!=0)
{
printf("请输入新增加的学生人数;");
scanf("%d",&a);
b=ST_NUM;
ST_NUM=a+ST_NUM; //*********************************总人数变化
for(i=b;i<ST_NUM;i++)
{
printf("\n");
printf("请输入要添加的第%d位学生:\n",i+1-b);
input();
}
average(); //***********************************输入完成后才可以加和!!!
sort();
printf("\n:)添加成功!\n");
}
else
printf("(⊙︿⊙)数组尚未创建!\n");
}
/******************************8.按给定学号修改成绩**************************************/
void modify()
{
flag=0;
char a[10];
if(ST_NUM!=0)
{
printf("请输入要修改成绩的学生学号:\n");
scanf("%s",a);
for(i=0;i<ST_NUM;i++)
{
if(strcmp(ST[i].num,a)==0)
{
output2();
output();
printf("\n");
printf("请重新输入以下信息:\n");
input();
average();
sort();
printf(":)修改成功!\n");
break; //************************默认无相同学号,找到一个便终止循环
}
else
if(i==ST_NUM-1)
printf("(⊙︿⊙)未找到,请确认输入无误!\n");
}
}
else
printf("(⊙︿⊙)数组尚未创建!\n");
}
/******************************9.按给定学号删除成绩*************************************/
void ddelete()
{
flag=0;
char a[13];
int m;
if(ST_NUM!=0)
{
printf("删除学生成绩,先");
numbersearch ();
if(flag==1)
{
printf("确定删除该学生成绩?(1=确定)\n");
scanf ("%d",&m);
if(m==1)
{
for(i=c;i<ST_NUM;i++) //从该名次开始,后一位覆盖前一位
ST[i]=ST[i+1];
ST_NUM-=1; //****************************总人数减一
printf(":)删除成功!\n");
}
}
}
else
printf("(⊙︿⊙)数组尚未创建!\n");
}
/******************************0.结束程序***********************************************/
void quit()
{
printf("\t:)谢谢使用:),欢迎再次使用!\n");
}
/********************************菜单***************************************************/
void menu()
{
printf("\t\t欢迎使用青岛科技大学学生成绩管理系统\n");
printf("\t\t\t明德 笃学 弘毅 拓新\n");
printf("\t\t\t*******************\n");
printf("\t\t\t1.输入学生成绩\n");
printf("\t\t\t2.显示学生成绩\n");
printf("\t\t\t3.按总成绩查找\n");
printf("\t\t\t4.按学号查找\n");
printf("\t\t\t5.从高到低排序输出\n");
printf("\t\t\t6.从低到高排序输出\n");
printf("\t\t\t7.按给定学号添加成绩\n");
printf("\t\t\t8.按给定学号修改成绩\n");
printf("\t\t\t9.按给定学号删除成绩\n");
printf("\t\t\t0.结束程序\n");
printf("\t\t\t*******************\n\n\n");
printf("\t:)请选择:");
}
/********************************选择***************************************************/
void choice()
{
int choice;
scanf("%d",&choice);
switch(choice)
{
case 1:inputscore();
break;
case 2:outputscore();
break;
case 3:scoresearch();
break;
case 4:numbersearch();
break;
case 5:order();
break;
case 6:reverse();
break;
case 7:add();
break;
case 8:modify();
break;
case 9:ddelete();
break;
case 0:quit();
exit(0);//*************************************正常退出程序
default:printf("\t(⊙︿⊙)选择出错,请重新选择!\n");
}
}
/********************************主函数*************************************************/
int main()
{
do{
menu();
choice();
system("pause"); //*****************************************暂停
system("cls"); //***************************************清屏
}while(1);
return 0;
}