线性表的基本操作,使用Visual C++ 完成。

定义一个包含学生信息(学号,姓名,成绩)的的顺序表和链表,使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。

实验要求:
(1) 程序要添加适当的注释,程序的书写要采用缩进格式。
(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。
(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
(4) 根据实验报告模板详细书写实验报告,在实验报告中给出链表根据姓名进行查找的算法和插入算法的流程图。

第1个回答  2012-03-29
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1000
/*定义学生成绩信息结构*/
struct stu
{
char id[8];//学号
char name[8];//姓名
char xingb[8];//性别
double bb;//班别
double C;//c语言成绩
double Math;//数学成绩
double GM;//高等数学成绩
double average;
double total;
};
/*学生结构数组,用于存储学生成绩信息*/
struct stu students[MAX];
/*当前学生人数*/
int current;

//输入函数
void input()
{
int i;
printf("\n\n请输入学生人数:");
scanf("%d",¤t);
for (i = 0; i < current; i++)
{
printf("\n请输入学生学号: ");
scanf("%s", students[i].id);
printf("请输入学生姓名:");
scanf("%s", students[i].name);
printf("请输入学生姓别:");
scanf("%s", students[i].xingb);
printf("请输入学生班级:");
scanf("%d",&students[i].bb);
printf("请输入C语言成绩:");
scanf("%lf", &students[i].C);
printf("请输入线性代数成绩:");
scanf("%lf", &students[i].Math);
printf("请输入高等数学成绩:");
scanf("%lf", &students[i].GM);
students[i].total = students[i].C + students[i].Math + students[i].GM;//总分
students[i].average = students[i].total / 3;//平均分
}
}
/*排名次,即对学生结构数组排序*/
void sort(struct stu array[], int n)
{
int i, j;
struct stu temp;
for (i = 0; i < n; i++)
{
for (j = i+1; j < n; j++)
{
if (array[i].average - array[j].average < 1e-16)
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}

/*统计平均成绩,并输出各分数段的人数*/
void print_score(struct stu array[], int n)
{
int i;
double ave = 0;
int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;
for (i = 0; i < n; i++)
{
ave += array[i].average;
switch ((int)(array[i].average / 10))
{
case 10:
case 9: sum1++; break;
case 8: sum2++; break;
case 7:
case 6: sum3++; break;
default: sum4++;
}
}
printf("全班的平均分为:%.1f\n", ave/n);
printf("平均分在90分以上的人数为:%d\n", sum1);
printf("平均分在80~89的人数为:%d\n", sum2);
printf("平均分在60~79的人数为:%d\n", sum3);
printf("平均分在60分以下的人数为:%d\n", sum4);
}
/*输出不及格科目及学生名单*/
void print_unreach(struct stu array[], int n)
{
int i;
printf("空白表示没不及格学生\n");
printf("科目\t\t学号\t\t名字\n");
for (i = 0; i < n; i++)
{
if (array[i].C < 60)
{
printf("C语言\t%s\t%s\n", array[i].id, array[i].name);
}
if (array[i].Math < 60)
{
printf("线性代数\t%s\t%s\n", array[i].id, array[i].name);
}
if (array[i].GM < 60)
{
printf("高等数学\t%s\t%s\n", array[i].id, array[i].name);
}
}
}
//输出全部学生
void output(struct stu array[], int n)
{
int i;
printf("学号\t姓名\t性别\t班级\t线性代数\t高等数学\t平均分\t名次\n");
for(i=0;i<n;i++)
{
printf("%s\t%s\t%s\t", array[i].id, array[i].name,array[i].xingb);
printf("%d\t",array[i].bb);
printf("%.f\t\t%.f\t\t%.1f\t", array[i].C, array[i].Math, array[i].GM, array[i].average);
printf("%d\n", i+1);
}
}
/*打印优等生名单*/
void print_good(struct stu array[], int n)
{
int i;
char mark = 0;
if (n > 3)
n = 3;
printf("学号\t姓名\t性别\t班级\t线性代数\t高等数学\t平均分\t名次\n");
for (i = 0; i < n; i++)
{ if ((array[i].C > 60) && (array[i].Math > 60) && (array[i].GM > 60))
}
if (array[i].average > 90) mark = 1;
else if (array[i].average > 85)
{
if (array[i].C == 100) mark = 1;
if (array[i].Math == 100) mark = 1;
if (array[i].GM == 100) mark = 1;
if (array[i].C > 95 && array[i].GM > 95) mark = 1;
if (array[i].C > 95 && array[i].Math > 95) mark = 1;
if (array[i].Math > 95 && array[i].GM > 95) mark = 1;
}
if (mark == 1)
{
printf("%s\t%s\t%s\t", array[i].id, array[i].name,array[i].xingb);
printf("%d\t",array[i].bb);
printf("%.f\t\t%.f\t\t%.1f\t", array[i].C, array[i].Math, array[i].GM, array[i].average);
printf("%d\n", i+1);
}
}
}
}

/*按学生姓名查询成绩*/
void search_name(struct stu array[], int n, char* name)
{
int i;
char mark = 1;
for (i = 0; i < n; i++)
{
if (strcmp(name, array[i].name) == 0)
{
printf("学生姓名:%s\n", name);
printf("学生学号:%s\n", array[i].id);
printf("学生性别:%s\n",array[i].xingb);
printf("学生班级:%d\n",array[i].bb);
printf("C语言:%.f\n", array[i].C);
printf("线性代数:%.f\n", array[i].Math);
printf("高等数学:%.f\n", array[i].GM);
printf("平均分:%.1f\n", array[i].average);
mark = 0;
}
}
if (mark == 1) puts("不存在该学生记录");
}
/*按学生学号查询成绩*/
void search_id(struct stu array[], int n, char* id)
{
int i;
char mark = 1;
for (i = 0; i < n; i++)
{
if (strcmp(id, array[i].id) == 0)
{
printf("学生姓名:%s\n", array[i].name);
printf("学生学号:%s\n", array[i].id);
printf("学生性别:%s\n",array[i].xingb);
printf("学生班级:%d\n",array[i].bb);
printf("C语言:%.f\n", array[i].C);
printf("线性代数:%.f\n", array[i].Math);
printf("高等数学:%.f\n", array[i].GM);
printf("平均分:%.1f\n", array[i].average);
mark = 0;
break;
}
}
if (mark == 1) puts("不存在该学生记录");
}
void xy() //星子函数
{
printf("****************************************\n");
}

void print_menu()
{
system("cls");
xy();
printf(" ****欢迎****\n");
xy();
puts(" 学 ^ 1.数据输入 * ");
puts(" ^ * ");
puts(" 生 ^ 2.统计全班学生成绩 * ");
puts(" ^ 3.按学号查询学生成绩 * ");
puts(" 管 ^ 4.按姓名查询学生成绩 * ");
puts(" ^ 5.输出不及格情况 * ");
puts(" 理 ^ 6.输出优等生名单 * ");
puts(" ^ 7.输出全部学生 * ");
puts(" 系 ^ * ");
puts(" ^ 0.退出 * ");
puts(" 统 ^ *");
xy();
printf("\n\n 请输入你的选择: ");
}
int main(int argc, char **argv)
{
char ch = 0;
char id[8], name[8];
system("color 4F");
while (ch != '0')
{
print_menu();
ch = getchar();
switch (ch)
{
case '1':
{
system("cls");
input();
sort(students, current);
break;
}
case '2':
{
system("cls");
print_score(students, current);
break;
}
case '3':
{
system("cls");
printf("请输入学号:");
scanf("%s", id);
search_id(students, current, id);
break;
}
case '4':
{
system("cls");
printf("请输入姓名:");
scanf("%s", name);
search_name(students, current, name);
break;
}
case '5':
{
system("cls");
print_unreach(students, current);
break;
}
case '6':
{
system("cls");
print_good(students, current);
break;
}
case '7':
{
system("cls");
output(students, current);
break;
}
case '0': exit(0);
default :
printf("输入错误,请重新输入");
}
printf("\n\n按任意键返回主菜单……");
getchar();
getchar();
}
return 0;
}
这是本人以前做过的,你看下,希望对您有帮助,可能会有某点不同,但修改下就行。

夏本回答被提问者采纳
相似回答