学生成绩管理系统 C语言课程设计报告
时间:2025-02-24
时间:2025-02-24
《学生成绩管理系统》
课程设计报告
专 业:班 级:姓 名:指导教师:学 号: 信息科学与工程学院 电气信息类0916班 曹坤 汤哲 0909091612
课程设计报告
一、课程设计题目 学生成绩管理系统 1、需要处理的基础数据
学生基本信息:如班级、学号、姓名、性别、年龄等。
学生选修课程的基本信息:课程编号、课程名称、学分、考试成绩、平
时成绩、综合成绩(考试成绩*0.7+平时成绩*0.3)等。
主菜单
2、系统的基本功能
数据的录入:如录入学生的基本信息,以及该学生选修课程的基本信息; 数据的修改:如修改指定学号、或者指定姓名的学生信息,或者修改其
选修课程信息;
数据的插入:插入某个学生信息;
数据的查询:如按学号查询、按姓名查询等;
数据的删除:如删除指定学号、或者指定姓名的学生及其选修课程信息; 平均成绩的计算:计算每个学生各门功课的平均成绩,并按平均成绩从
高到低的次序输出学生信息;
列出不及格学生清单(学号、姓名、不及格的课程和成绩)。 考虑用文件把数据保存起来(可选)。
3、链表
struct stu /*定义学生基本信息结构体*/ {
int i; /*以输入的顺序来确定的学生序号*/ char num[11];
char classnum[5]; char name[128]; char sex[32]; int age; float ave;
struct stu *next; };
int n=0; /*学生人数*/ struct stu *head=0;
struct stu1 /*定义学生选修课信息结构体*/ {
char lessonnum[11]; char lessonname[256]; float score;
float testgrade; float commongrade; float grade;
struct stu1 *next; };
int m;
struct stu1 *a[max_num] ;/*定义一个指针数组来记住课程链表地址*/ /*---------------------- 数据的录入程序 -----------------------*/
void create(void) /*建立学生基本信息链表*/ {
n=0;
struct stu *p1,*p2; char ch,ch1;
struct stu1 *create1(void); do {
n=n+1; a[n]=0;
system("cls");
p1=(struct stu *)malloc(LEN); printf("\n学号:"); scanf("%s",p1->num); printf("\n班级:");
scanf("%s",p1->classnum); printf("\n姓名:"); scanf("%s",p1->name) ; printf("\n性别:"); scanf("%s",p1->sex); printf("\n年龄:"); scanf("%d",&p1->age); if(n==1)head=p1; else p2->next=p1; p2=p1;
printf("\n是否输入选修课信息(y/n)\n");
fflush(stdin); /*清空输入缓冲区*/ ch1=getchar();
if(ch1=='y'||ch1=='Y')
a[n]=create1(); /*根据序号来记忆课程链表地址*/ p1->i=n;
system("cls");
printf("\n是否继续输入另一学生信息(y/n)\n"); fflush(stdin); /*清空输入缓冲区*/ ch=getchar();
}while(ch=='y'||ch=='Y'); p2->next=0; }
struct stu1 *create1(void) /*建立课程链表*/ {
m=0;
struct stu1 *p1,*p2; char ch;
struct stu1 *head=0; do {
m=m+1;
system("cls");
p1=(struct stu1 *)malloc(LEM); printf("\n课程编号:");
scanf("%s",p1->lessonnum);
printf("\n课程名称:");
scanf("%s",p1->lessonname); printf("\n学分:");
scanf("%f",&p1->score); printf("\n考试成绩:");
scanf("%f",&p1->testgrade); printf("\n平时成绩:");
scanf("%f",&p1->commongrade);
p1->grade=p1->testgrade*0.7+p1->commongrade*0.3; printf("\n综合成绩:%-6.1f",p1->grade); if(m==1)head=p1; else p2->next=p1; p2=p1;
printf("\n是否继续输入另一课程信息(y/n)\n"); fflush(stdin); /*清空输入缓冲区*/ ch=getchar();
}while(ch=='y'||ch=='Y'); p2->next=0; return(head); }
二、设计思路
界面:界面的显示由循环语句和switch语句来控制完成。
数据的录入:运用链表进行数据的存储,由于要录入的数据有两种即学生的基本信息和学生的选修课程信息,本系统采用两个链表分别存储数据,采用数组将两个链表联系起来,运用循环语句和判断语句来进行数据的录入。作者感到本功能设计中的难点在于
将两个链表联系起来,解决方案是采用一个指针数组来将第二个链表中每个节点地址存储起来,进而将两个链表联系起来。
信息的修改:本系统采用的是按学号查找信息,系统采用一个由判断语句和循环语句构成的查询函数struct stu *findnum(void)来提供信息存储地址;再按照地址来进行修改,其中采用switch语句和循环语句来控制使系统能够提供选择修改的功能。在这
一功能的设计中,作者感到课程信息的修改中的添加课程信息功能是一个难点,解决方案是按插入方案来进行设计。
插入信息:本系统采用的是按学号顺序来进行插入的,在这一功能的设计中,首先在开辟一个结构体空间将插入学生的信息存储于其中,在采用判断语句和循环语句来查找该条信息应该插入位置的地址,将上一结点的下行指针指向本结点,再将该节点的下行
指针指向下一个结点从而达到插入信息的目的。在这一功能的设计中作者感到插入的具体算法是个难点,本系统采用的教材书 …… 此处隐藏:3749字,全部文档内容请下载后查看。喜欢就下载吧 ……