C语言成绩管理系统如何改变课程数目?

来源:百度知道 编辑:UC知道 时间:2024/06/22 04:51:28
我们课程设计要做一个成绩管理系统,老师要求我们在做这个项目时候,能够灵活设置课程数目。

比如,一年级N个课程,二年级M个课程。在一年级结束后,成绩管理系统需要增加M项课程成绩,如何实现?

请说明方法和思路,复制别人程序的就免了。

答案好的有追分
这个考虑过,老师说还有个数据冗余问题,让我们尽量减少冗余数据,节省存储空间并且提高排序效率等等。

我只说思路:
int kecheng;//课程个数
KeCheng *kc; //KeCheng 结构体,用malloc分配内存

KeCheng 结构体应包含“课程名字”,kc[i]中的i为课程id

你要有两个列表,保存两个学期课程id的列表
int kc_1[N]={1,2,3,4,5};
int kc_2[M]={1,2,3,4,5,6,7,8};
两个学期的课程可以随意指定。
(你都可以有第一个学期的课程而第二学期没有。)

你也可以做成多维数组,这样学期数也可以随意指定,但是初始化要自己写;

int **kc_list;

void kc_init()
{
kc_list=(int**)malloc(X* sizeof(int *));(X为学期数)
kc_init[0]=(int*)malloc(N* sizeof(int));
kc_init[1]=(int*)malloc(M* sizeof(int));

后面就可以赋值了
}

开始通过#define方式定义好了数组大小,怎么会又冗余呢。如果一开始就不知道数组个数的话,那就只能用指针和malloc函数来动态分配。
你只用保存指针不会造成冗余了吧。这样操作起来瞒麻烦
int *p;
int i=10; //i代表课的数目
p=(int *)malloc(sizeof(int)*i); //动态分配i个整数空间,你到时候自己变成浮点空间,格式一样
*p=1; //p指向第一门课的成绩
*(p+1)=2; //p+1指向第二门课的成绩

你前面可以加#define M 10
#define N 10
struct student
{
char name[10];
float Result[M]; //代表M门课的成绩。
float Result2[N]