#include
#include
#include
#include
#define STU_NUM 40 /* 最多的学生人数 */
#define COURSE_NUM 10 /* 最多的考试科目 */
struct Student< /p>
{
整数; /* 每个学生的学号 */
char name[10]; /* 每个学生的姓名 */
int Score[COURSE_NUM]; /* 每个学生M门功课的成绩 */
int sum; /* 每个学生的总成绩 */
浮动平均值; /* 每个学生的平均成绩 */
};
typedef struct Student STU;
/* 函数功能:向链表的补加从键盘 输入学生的学号、姓名和成绩等信息
函数参数:结构体指针头,指向存储学生信息的结构体存储的首地址
整型变量n,表示 学生大学生
整型变量m,表示考试科目
函数返回值:无
*/
void AppendScore(STU * head, int n, int m)
{
int j;
STU *p;
for (p=head; p
{
printf("\n输入数字:");
scanf("%d", &p-> number);
printf("输入姓名:");
scanf("%s", &p->name);
for (j=0; j { printf("输入分数%d:", j+1);< /p> scanf("%d", p->score+j); } } }
函数参数:结构体存储指针头,指向学生信息的结构体数据库的地址首部
整型变量n,表示大学生学生
整型变量m,表示考试双眼
函数返回值:无
*/
void PrintScore(STU *head, int n, int m)
{
STU *p;
int i;
char str[100] = {'\0'}, temp[3];
strcat(str, "数字名称");
for (i=1 ; i<=m; i++)
{
strcat(str, "分数");
itoa(i,temp, 10);
strcat(str, temp);
strcat(str, " ");
}
strcat(str,"平均总和");
printf("%s", str); /* 打印表头 */
for (p=head; p
{
printf("\nNo.%3d%8s", p->编号, p->名称);
for (i=0; i { printf("%7d", p->score[i]); } printf("%11d%9.2f\n", p->总和, p->平均值); } } /* 函数功能:计算每个学生的功课的总成绩和平均成绩 函数参数:结构体指针头,指向存储学生信息的 结构体数据库的首地址 整型变量n,表示学生人数 整型变量m,表示考试视野 函数返回值:无 p> */ void TotalScore(STU *head, int n, int m) { STU *p; int i; for (p=head; p { p->sum = 0;< /p> for (i=0; i { p->sum = p->sum + p->score[i] ; } p->平均值 = (float)p->sum / m; } } /* 函数功能:使用选择法按总成绩由高到低排序 函数参数:结构体指针头,指向存储学生信息的结构体数据库的首地址 整型变量n,表示大学生 函数返回值:无 */ void SortScore(STU *head, int n)< /p> { int i, j, k; STU temp; for (i=0; i { k = i; for (j=i; j { p> if ((head+j)->sum > (head+k)->sum) { k = j; } } if (k != i) { temp = *(head+k); { temp = *(head+k); p> *(head+k) = *(head+i); *(head+i) = temp; } } } /* 函数功 功能:查找学生的学号 函数参数:结构体指针头,指向存储学生信息的结构体存储的首地址 整型参数num,表示要查找的学号 号 整型变量n,表示学生人数 函数返回值:如果找到学号,则返回它在结构体数据库中的位置,否则返回-1 */ int SearchNum(STU *head, int num, int n) { int i; for (i=0; i { if ((head+i)->number == num) return i; return -1; } /* 函数功能:按学号查找学生成绩并显示查找结果 函数参数:结构体指针head,指向存储学生信息的结构体备份的首地址 整型变量n,表示学生人数 整型变量m,表示考试科目 函数返回值:无 */ void SearchScore(STU *head, int n, int m) {< /p> int number, findNo; printf("请输入您要查找的号码:"); scanf("%d", &number); findNo = SearchNum(head, number, n); if (findNo == -1) { printf("\n未找到!\n"); } else { PrintScore(head+findNo, 1, m); } } /* 函数功能:显示菜单并 获得用户键盘输入的选项 函数参数:无 函数返回值:用户输入的选项 */ char Menu (void) { char ch; printf("\n学生成绩管理\n"); printf (" 1.追加记录\n"); printf(" 2.列出记录\n"); printf(" 3.搜索记录\n");< /p> printf(" 4.对记录排序\n"); printf(" 0.Exit\n"); printf("请输入您的选择:"); scanf(" %c", &ch); /*在%c前面加一个空格,将存于坐标中心的回车符读入*/ return ch; } int main() { char ch; int m, n; STU Stu[STU_NUM]; printf("输入 ut 学号和课程号(学号<40,课程号<10):"); scanf("%d,%d", &n, &m); while (1) { ch = Menu(); /*显示菜单,并用户读取输入*/ switch (ch) p> { case'1':AppendScore(stu, n, m);/* 招成绩添加模块 */ TotalScore(stu, n, m) ; break; case'2':PrintScore(stu, n, m); /* 招成绩显示模块*/ break; p> case'3':SearchScore(stu, n, m);/* 调用按学号查找模块 */ break; case'4': SortScore(stu, n); /* 成绩排序模块 */ printf("\n排序结果\n"); PrintScore(stu, n, m); * 显示成绩排序结果 */ break; case'0':exit(0) /* 退出程序 */ printf("End 程序!"); break; default:printf("输入错误!"); break; } } }