【2019.3.29】
感觉是第一次完全独立写这么长的代码,
貌似当年C语言程序设计大作业的代码也就这么长,
以前虽然写过更长的,但或多或少都参考了网上的代码,
中间大修了若干次,小修了无数次,产生了各种各样的error,
大概写了四个小时,306行代码,应该还能再简化,
其实这道题用链表更合适,但懒得改了,
以后做题一定要看完全文再写,
不然就会产生中途修改的事。
有几个需要注意的地方:
1、SID是char数组类型,既方便比较,又可以保存前导零
2、求单科平均成绩时,我用的是“总成绩”除以“人数”,但人数有可能为0,此时要输出字符串“-nan”
3、各种格式,空格、换行,都要注意
4、i和j这种下标一定要看好,不要写错了……
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
/*数据结构******************************/
//学生的信息
typedef struct
{
char SID[20];
int CID;
char name[20];
int score[4];
}Student, *pStudent;
//学生信息数据库
Student Database[150];
//总成绩排名队列
int Scorerank[150];
//学生的个数
int studentNum;
/*子函数声明*****************************/
void Add(); //1 - Add
bool isDuplicated(char* sSID); //Add辅助函数
void Remove(); //2 - Remove
void Query(); //3 - Query
int getTotalScore(Student s); //Query辅助函数
double getAverScore(Student s); //Query辅助函数
void ShowRanking(); //4 - Show ranking
void ShowStatistics(); //5 - Show Statistics
int OutputWelcome(); //输出欢迎语 获取用户输入
bool AddWelcome(); //Add输出欢迎语
bool RemQueWelcome(); //Remove和Query输出欢迎语
int ShowStaWelcome(); //ShowStatistics输出欢迎语 获取用户输入
/*主函数*********************************/
int main()
{
//freopen("C:\\Users\\Summer\\Desktop\\input.txt", "r", stdin);
//freopen("C:\\Users\\Summer\\Desktop\\output.txt", "w", stdout);
int inputNum;
while((inputNum = OutputWelcome()) && inputNum)
{
switch(inputNum)
{
case 1: Add(); break;
case 2: Remove(); break;
case 3: Query(); break;
case 4: ShowRanking(); break;
case 5: ShowStatistics(); break;
default: break;
}
}
return 0;
}
/*子函数实现*****************************/
void Add() //1 - Add
{
char sSID[20];
int sCID;
char sname[20];
int sscore[4];
while(