题目:学生管理系统设计
功能:学生管理系统设计,每个学生信息作为一条记录,学号、成绩、平均分。
系统要求实现以下功能:
1、输入功能:录入学生信息(包括学生学号、成绩、平均分等);
2、显示功能:完成学生记录的显示。
3、查找功能:完成按学号查找学生的相关记录,并显示。
分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、完成信息的录入和显示(即通过编程创建文件,输入学生信息并可将文件内容显示出来)3、输入成绩(计算出平均成绩以及排序)4、按学号查询其学生成绩。
要求:1、用C语言实现程序设计;
2、利用结构体数组、等实现学生信息表达、查询等,充分体现数据结构的知识;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序要有注释。
5、程序中所用到的排序查找方法需采用数据结构中所学方法实现,要求方法实用效率高。
.C
#include <stdio.h>
#include <stdlib.h>
#define N 10
int n;
typedef struct stu{
int num;
float score[3];
float ave;
}STU;
STU st[N];
//******帮助菜单*******
void help()
{
printf("**************************************\n");
printf("* 学生成绩管理系统--帮助菜单 *\n");
printf("**************************************\n");
printf("* H = 显示帮助菜单 *\n");
printf("* T = 成绩录入 *\n");
printf("* A = 计算学生平均成绩 *\n");
printf("* L = 列出成绩表 *\n");
printf("* P = 按平均成绩由高到低排序 *\n");
printf("* S = 按学号查询学生成绩 *\n");
printf("* C = 清屏 *\n");
printf("* Q = 退出系统 *\n");
printf("**************************************\n");
}
//*****成绩录入*******
void type()
{
int i;
printf("请输入学生人数:");
scanf("%d", &n);
printf("请输入%d名学生的三门课成绩:\n", n);
printf("学号 语文 数学 外语\n");
for(i = 1; i <= n; i++)
{
st[i-1].num = i;
printf("%d ",st[i-1].num);
scanf("%f %f %f",&st[i-1].score[0], &st[i-1].score[1], &st[i-1].score[2]);
}
}
//*****列出成绩******
void list()
{
int i;
printf("学生成绩如下:\n");
printf("学号 语文 数学 外语 平均分\n");
for(i = 1; i <= n; i++)
{
printf("%d %.1f %.1f %.1f %.1f\n", st[i-1].num, st[i-1].score[0], st[i-1].score[1], st[i-1].score[2], st[i-1].ave);
}
}
//*****求出平均值******
void average()
{
int sum = 0, i;
for(i = 0; i < n; i++)
{
sum = st[i].score[0] + st[i].score[1] + st[i].score[2];
st[i].ave = sum / 3;
}
printf("平均分已计算。请使用命令L查看。\n");
}
//*****按平均分从高到低排序*****
void sort()
{
int i, j;
STU tmp;
for(i = 0; i < n-1; i++)
{
for(j = 0; j < n-i-1; j++)
{
if(st[j].ave < st[j+1].ave)
{
tmp = st[j];
st[j] = st[j+1];
st[j+1] = tmp;
}
}
}
printf("完成排序。请使用命令L查看\n");
}
//*****按学号查询******
void search()
{
int i, j;
printf("请输入要查找的学生学号:");
scanf("%d", &i);
for(j = 0; j < n; j++)
{
if(st[j].num == i)
{
printf("%d %.1f %.1f %.1f %.1f\n", i, st[j].score[0], st[j].score[1], st[j].score[2], st[j].ave);
}
}
}
//*****新增学生的成绩录入******
void add()
{
int i,addnum;
printf("请输入学生人数:");
scanf("%d", &addnum);
printf("请输入%d名学生的三门课成绩:\n", addnum);
printf("学号 语文 数学 外语\n");
n = n + addnum;
for(i = n - addnum; i < n; i++)
{
st[i].num = i+1;
printf("%d ",st[i].num);
scanf("%f %f %f",&st[i].score[0], &st[i].score[1], &st[i].score[2]);
}
}
.main
#include <stdio.h>
#include <stdlib.h>
#include "stu.h"
int main(int argc, const char *argv[])
{
char order;
help();
while(1)
{
printf("请输入命令=");
scanf("%c", &order);
switch(order)
{
case 'H':
help();
break;
case 'T':
if(n == 0)
type();
else
add();
break;
case 'A':
if(n == 0)
puts("成绩表为空!请先使用命令T录入学生成绩。");
else
average();
break;
case 'L':
if(n == 0)
puts("成绩表为空!请先使用命令T录入学生成绩。");
else
list();
break;
case 'P':
if(n == 0)
puts("成绩表为空!请先使用命令T录入学生成绩。");
else
sort();
break;
case 'S':
if(n == 0)
puts("成绩表为空!请先使用命令T录入学生成绩。");
else
search();
break;
case 'C':
system("clear");
break;
case 'Q':
exit(1);
}
getchar();//用scanf输入字符时,会同时把回车接受到,放在
//缓存区中,执行下次while循环时,会打印两次输出语句,
//所以使用getcahr来接收垃圾字符
}
return 0;
}
.h
extern int n;
void help();
void type();
void list();
void average();
void sort();
void search();
void add();
Makefile
CC=gcc
OBJS=.o .o (.c和main)
CFLAGS=-c -Wall -g
stu:$(OBJS)
$(CC) $(OBJS) -o $@
$(OBJS):%.o:%.c
$(CC) $(CFLAGS) $^ -o $@
.PHONY:
clean:
rm *.o stu