您的位置:首页 > 其它

学员成绩管理的简单C实现

2008-05-13 18:10 134 查看
/*
============================================================================
Name : sms.c
Author : liky
Version :
Copyright : 2.0
Description :

每个学员包括3门课的成绩,包括学号、姓名、语文、数学、英语成绩
以及三门课程的平均成绩,成绩按照从大到小排序,增加一条记录时,
新加入的记录必须保持成绩表原有的顺序,删除时也一样
============================================================================
*/

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

struct student {
char no[10];
char name[10];
double score[3];
double avg;
};

struct student stu[50];
int stuNum = 0; // 当前的学生总人数

/*
* 录入一个新的学生信息
* 返回一个student结构
*/

struct student input();

/*
* 将一个学生插入到数组的末尾
* 如果插入成功,返回1,否则返回0
*/

int add(struct student);

/*
* 插入一个学员的信息,要求插入后的学员信息依然有序
* 如果插入成功,返回1,否则返回0
*/

int insert();

/*
* 显示学员信息
*/

void show();

/*
* 对学员信息进行排序
*/

void sort();

/*
* 删除学员信息
*/

int del();

void main() {
char select;
char resume;

printf("==================================================================/n");
printf("* */n");
printf("* 学生成绩管理系统 */n");
printf("* */n");
printf("* 作者:liky 版本1.0 版权2008 */n");
printf("* */n");
printf("==================================================================/n");
printf(" /n");

MENU:
do {
fflush(stdin);
printf("/n/n请选择: 1添加 2插入 3删除 4打印 5退出/n");
scanf("%c", &select);

switch (select)
{

case '1':// 循环添加学生成绩
do {
add(input());
fflush(stdin);
printf("是否继续录入学生信息: (Y继续,其他则退出)");
scanf("%c", &resume);
} while (resume == 'y' || resume == 'Y');
goto MENU;
case '2':
insert();
goto MENU;
case '3':
del();
goto MENU;
case '4':
show();
goto MENU;
case '5':
exit(1);
}

} while (select<49 || select>52);
}

struct student input() {
struct student stu;
char *subject[3] = {"语文","数学","英语"};
int i;
double tmp;
double sum = 0;

fflush(stdin);
printf("/n/n请输入学号:");
gets(stu.no);
fflush(stdin);

printf("请输入姓名:");
gets(stu.name);
fflush(stdin);

for (i=0; i<3;) {
printf("请输入%s成绩:", subject[i]);
scanf("%lf", &tmp);
if (tmp > 0 && tmp <=100) {
stu.score[i] = tmp;
sum += tmp;
i++;
}
}

stu.avg = sum/3;

return stu;
}

int add(struct student s) {

if (stuNum >= 50) {
printf("学生人数已满,无法再添加了!/n");
return 0;
}
else { // 要判断结构是否为空
stuNum ++;
stu[stuNum-1] = s;
return 1;
}
}

int insert() //插入函数
{
int isOk = 0;
int i, j;
struct student tmp;

printf("/n请输入要插入的学员信息");

tmp=input();

for (i=0; i<stuNum; i++) {
if (stu[i].avg < tmp.avg) {
isOk = 1;
stuNum++;
break;
}
}

for (j=stuNum; j>=i; j--) {
stu[j+1]=stu[j];
}
stu[i]=tmp;
return isOk;
}

void show() {
int i;

// 在输出之前,先排序
sort();

for (i=0; i<stuNum; i++) {
printf("学生%d的信息如下:/n", i+1);
printf("学号: %s/t", stu[i].no);
printf("姓名: %s/t", stu[i].name);
printf("语文: %.1f/t", stu[i].score[0]);
printf("数学: %.1f/t", stu[i].score[1]);
printf("英语: %.1f/n", stu[i].score[2]);
printf("平均: %.1f/n", stu[i].avg);
}
}

void sort() {
struct student tmp;
int i;
int j;

for (i=0; i<stuNum; i++) {
for (j=0; j<stuNum- 1 -i; j++) {
if (stu[j].avg < stu[j+1].avg) {
tmp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=tmp;
}
}
}
}

int del () {

char stuNo[10];
int i,j;
int isOk = 0;

fflush(stdin);
printf("请输入要删除的学生学号: ");
gets(stuNo);

for (i=0; i<stuNum; i++) {
if (!strcmp(stu[i].no, stuNo)) {
stuNum--;
isOk = 1;
break;
}
}

for (j=i; j<stuNum; j++) {
stu[j]=stu[j+1];
}

if (isOk) {
printf("删除学号为%s的学生成绩成功!/n", stuNo);
}
else {
printf("学号为%s的学生成绩不存在!/n", stuNo);
}

return isOk;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: