c语言程序课程设计学生成绩管理程序
武汉科技大学
二〇一〇~二〇一一学年第一学期
信息科学与工程学院
课程设计报告书
课程名称: C语言课程设计
班 级: 自动化级2班
学 号:
姓 名:
指导老师:
二〇一〇 年 九 月
设计题目:学生成绩管理程序
任务:自学C语言中相关知识,设计出学生成绩管理程序。
设计要求:
能录入学生信息存储在文件中,每位学生录入的信息有:姓名、学号、性别、班级、和三门功课(数学、英语、计算机)的成绩;
能够统计每个学生三门课程的总成绩;
能按学生学号查询其三门功课成绩并显示;
能浏览全部学生成绩;
能按总成绩有高到低显示学生信息。
系统功能需求分析:
系统要求用户必须输入正确的信息格式;
系统应该提供已经记录在案的信息数目;
系统应提供查询、删除、保存、浏览功能;
系统总体设计框架:
主界面
主界面
查询学生资料
删除学生资料
登记学生资料
修改学生资料
保存
浏览全部
排序浏览
系统功能模块图:1,登记学生资料尽快保存;
2,删除学生信息;
3,查询学生信息;
4,修改学生信息;
5,保存学生信息;
6,保存资料后浏览全部学生成绩;
7,保存资料后按总成绩排名;
退出系统。
功能模块的算法设计思路:
1,增加学生:将指针放在链表尾,开辟一个结构体单元,输入学号,查找是否有重复学号,如无,则写入,再关闭文件。
2,查询信息:如果l->next为空,则无信息;按学号查,输入要查的学号,与链表中数据一个一个进行比较,找到所在处,指针指向,输出信息。无信息则提示。
3,删除信息:如果l->next为空,则无信息;按学号删,输入要删的学号,在链表中号码一个一个与所找学号比较,找到后将前一个数据的尾接到后一个的头;
4,修改信息:如果l->next为空,则无信息,输入要该的学号,在文件中找到,重新写入各项信息,保存。
5,保存:打开一个制定文件,将链表的内容写入文件中,关闭文件。
6,浏览:打开文件,找到链表头,逐个输出。
7,排序:建立一个新的结构体,将文件中内容复制到新结构体中,用冒泡排序将总成绩排序,输出。
工作流程图:
主要源程序代码:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int numbercount=0; /* */
struct student
{
char num[10];/* 学号 */
char name[20]; /*姓名*/
char sex[10];/*性别*/
char clas[10];/*班级*/
int mgrade;/*数学*/
int egrade; /*英语*/
int cgrade;/*计算机*/
int totle;/*总分*/
};
typedef struct node
{ struct student data;
struct node *next;
}Node,*Link;
void printenglish(Node *p)/* 本函数用于输出英文 */
{ printf("%-12s%s\t%s\t%s\t%d\t%d\t%d\t%d\n",p->data.num,p->data.name,p->data.sex,p->data.clas,p->data.mgrade,p->data.egrade,p->data.cgrade,p->data.totle);
}
void Add(Link l) /* 增加学生信息*/
{
Node *p,*r,*s;
char num[10],a[10];
r=l; /*l为小写L*/
s=l->next;
while(r->next!=NULL)
r=r->next; /* 将指针置于最末尾 */
while(1)
{
printf("请你输入学号:");
scanf("%s",num);
for(;s!=NULL;s=s->next)
{
if(strcmp(s->data.num,num)==0)
{
printf("提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num);
printf("学号 姓名 性别 班级 数学成绩 英语成绩 计算机成绩