学生成绩管理系统 课程设计实习报告

513好学 2023-02-17 07:55 编辑:admin 65阅读

学生成绩管理(c语言版)

/*11.3.2 源程序*/

/***********xuesheng.c***********/

/******头文件(.h)***********/

#include stdio.h /*I/O函数*/

#include stdlib.h /*其它说明*/

#include string.h /*字符串函数*/

#include conio.h /*屏幕操作函数*/

#include mem.h /*内存操作函数*/

#include ctype.h /*字符操作函数*/

#include alloc.h /*动态地址分配函数*/

#define N 3 /*定义常数*/

typedef struct z1 /*定义数据结构*/

{

char no[11];

char name[15];

int score[N];

float sum;

float average;

int order;

struct z1 *next;

}STUDENT;

/*以下是函数原型*/

STUDENT *init(); /*初始化函数*/

STUDENT *create(); /*创建链表*/

STUDENT *delete(STUDENT *h); /*删除记录*/

void print(STUDENT *h); /* 显示所有记录*/

void search(STUDENT *h); /*查找*/

void save(STUDENT *h); /*保存*/

STUDENT *load(); /*读入记录*/

void computer(STUDENT *h); /*计算总分和均分*/

STUDENT *insert(STUDENT *h); /*插入记录*/

void append(); /*追加记录*/

void copy(); /*复制文件*/

STUDENT *sort(STUDENT *h); /*排序*/

STUDENT *index(STUDENT *h); /*索引*/

void total(STUDENT *h); /*分类合计*/

int menu_select(); /*菜单函数*/

/******主函数开始*******/

main()

{

int i;

STUDENT *head; /*链表定义头指针*/

head=init(); /*初始化链表*/

clrscr(); /*清屏*/

for(;;) /*无限循环*/

{

switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/

{ /*值不同,执行的函数不同,break 不能省略*/

case 0:head=init();break; /*执行初始化*/

case 1:head=create();break; /*创建链表*/

case 2:head=delete(head);break; /*删除记录*/

case 3:print(head);break; /*显示全部记录*/

case 4:search(head);break; /*查找记录*/

case 5:save(head);break; /*保存文件*/

case 6:head=load(); break; /*读文件*/

case 7:computer(head);break; /*计算总分和均分*/

case 8:head=insert(head); break; /*插入记录*/

case 9:copy();break; /*复制文件*/

case 10:head=sort(head);break; /*排序*/

case 11:append();break; /*追加记录*/

case 12:head=index(head);break; /*索引*/

case 13:total(head);break; /*分类合计*/

case 14:exit(0); /*如菜单返回值为14程序结束*/

}

}

}

/*菜单函数,返回值为整数*/

menu_select()

{

char *menu[]={***************MENU***************, /*定义菜单字符串数组*/

0. init list, /*初始化*/

1. Enter list, /*输入记录*/

2. Delete a record from list, /*从表中删除记录*/

3. print list , /*显示单链表中所有记录*/

4. Search record on name, /*按照姓名查找记录*/

5. Save the file, /*将单链表中记录保存到文件中*/

6. Load the file, /*从文件中读入记录*/

7. compute the score, /*计算所有学生的总分和均分*/

8. insert record to list , /*插入记录到表中*/

9. copy the file to new file, /*复制文件*/

10. sort to make new file, /*排序*/

11. append record to file, /*追加记录到文件中*/

12. index on nomber, /*索引*/

13. total on nomber, /*分类合计*/

14. Quit}; /*退出*/

char s[3]; /*以字符形式保存选择号*/

int c,i; /*定义整形变量*/

gotoxy(1,25); /*移动光标*/

printf(press any key enter menu......\n); /*压任一键进入主菜单*/

getch(); /*输入任一键*/

clrscr(); /*清屏幕*/

gotoxy(1,1); /*移动光标*/

textcolor(YELLOW); /*设置文本显示颜色为黄色*/

textbackground(BLUE); /*设置背景颜色为蓝色*/

gotoxy(10,2); /*移动光标*/

putch(0xc9); /*输出左上角边框┏*/

for(i=1;i<44;i++)

putch(0xcd); /*输出上边框水平线*/

putch(0xbb); /*输出右上角边框 ┓*/

for(i=3;i<20;i++)

{

gotoxy(10,i);putch(0xba); /*输出左垂直线*/

gotoxy(54,i);putch(0xba);

} /*输出右垂直线*/

gotoxy(10,20);putch(0xc8); /*输出左上角边框┗*/

for(i=1;i<44;i++)

putch(0xcd); /*输出下边框水平线*/

putch(0xbc); /*输出右下角边框┛*/

window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/

clrscr(); /*清屏*/

for(i=0;i<16;i++) /*输出主菜单数组*/

{

gotoxy(10,i+1);

cprintf(%s,menu[i]);

}

textbackground(BLACK); /*设置背景颜色为黑色*/

window(1,1,80,25); /*恢复原窗口大小*/

gotoxy(10,21); /*移动光标*/

do{

printf(\n Enter you choice(0~14):); /*在菜单窗口外显示提示信息*/

scanf(%s,s); /*输入选择项*/

c=atoi(s); /*将输入的字符串转化为整形数*/

}while(c<0||c>14); /*选择项不在0~14之间重输*/

return c; /*返回选择项,主程序根据该数调用相应的函数*/

}

STUDENT *init()

{

return NULL;

}

/*创建链表*/

STUDENT *create()

{

int i; int s;

STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/

for(;;)

{

info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/

if(!info) /*如果指针info为空*/

{

printf(\nout of memory); /*输出内存溢出*/

return NULL; /*返回空指针*/

}

inputs(enter no:,info->no,11); /*输入学号并校验*/

if(info->no[0]=='@') break; /*如果学号首字符为@则结束输入*/

inputs(enter name:,info->name,15); /*输入姓名,并进行校验*/

printf(please input %d score \n,N); /*提示开始输入成绩*/

s=0; /*计算每个学生的总分,初值为0*/

for(i=0;i<N;i++) /*N门课程循环N次*/

{

do{

printf(score%d:,i+1); /*提示输入第几门课程*/

scanf(%d,&info->score[i]); /*输入成绩*/

if(info->score[i]>100||info->score[i]<0) /*确保成绩在0~100之间*/

printf(bad data,repeat input\n); /*出错提示信息*/

}while(info->score[i]>100||info->score[i]<0);

s=s+info->score[i]; /*累加各门课程成绩*/

}

info->sum=s; /*将总分保存*/

info->average=(float)s/N; /*求出平均值*/

info->order=0; /*未排序前此值为0*/

info->next=h; /*将头结点做为新输入结点的后继结点*/

h=info; /*新输入结点为新的头结点*/

}

return(h); /*返回头指针*/

}

/*输入字符串,并进行长度验证*/

inputs(char *prompt, char *s, int count)

{

char p[255];

do{

printf(prompt); /*显示提示信息*/

scanf(%s,p); /*输入字符串*/

if(strlen(p)>count)printf(\n too long! \n); /*进行长度校验,超过count值重输入*/

}while(strlen(p)>count);

strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/

}

/*输出链表中结点信息*/

void print(STUDENT *h)

{

int i=0; /* 统计记录条数*/

STUDENT *p; /*移动指针*/

clrscr(); /*清屏*/

p=h; /*初值为头指针*/

printf(\n\n\n****************************STUDENT********************************\n);

printf(|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n);

printf(|---|----------|---------------|----|----|----|--------|-------|-----|\n);

while(p!=NULL)

{

i++;

printf(|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n, i, p->no,p->name,p->score[0],p->score[1],

p->score[2],p->sum,p->average,p->order);

p=p->next;

}

printf(**********************************end*********************************\n);

}

/*删除记录*/

STUDENT *delete(STUDENT *h)

{

STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/

char s[11]; /*存放学号*/

clrscr(); /*清屏*/

printf(please deleted no\n); /*显示提示信息*/

scanf(%s,s); /*输入要删除记录的学号*/

q=p=h; /*给q和p赋初值头指针*/

while(strcmp(p->no,s)&&p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/

{

q=p; /*将p指针值赋给q作为p的前驱指针*/

p=p->next; /*将p指针指向下一条记录*/

}

if(p==NULL) /*如果p为空,说明链表中没有该结点*/

printf(\nlist no %s student\n,s);

else /*p不为空,显示找到的记录信息*/

{

printf(*****************************have found***************************\n);

printf(|no | name | sc1| sc2| sc3| sum | ave |order|\n);

printf(|----------|---------------|----|----|----|--------|-------|-----|\n);

printf(|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n, p->no,

p->name,p->score[0],p->score[1],p->score[2],p->sum,

p->average,p->order);

printf(********************************end*******************************\n);

getch(); /*压任一键后,开始删除*/

if(p==h) /*如果p==h,说明被删结点是头结点*/

h=p->next; /*修改头指针指向下一条记录*/

else

q->next=p->next; /*不是头指针,将p的后继结点作为q的后继结点*/

free(p); /*释放p所指结点空间*/

printf(\n have deleted No %s student\n,s);

printf(Don't forget save\n);/*提示删除后不要忘记保存文件*/

}

return(h); /*返回头指针*/

}

学生成绩管理系统

一、 设计内容:

(1) 设计系统的功能框图、流程图;

(2) 编写学生成绩管理系统的源程序代码;

1) 按学生姓名查询成绩

2) 分别统计每门课程的“优秀(90分~100分)”、“良好(80分~89分)”、“中等(70分~79分)”、“及格(60分~69分)”和“不及格(0分~59分)”人数及所占总人数的百分比。

(3) 上机调试;

(4) 书写实习报告。

二、 课程设计系统组成及模块功能:学生成绩管理是教学管理中的一项重要内容,主要包括成绩的录入、显示、查询和统计四大模块。各主要模块的功能如下:

(用菜单实现选择)

(1) 录入模块

通过键盘录入几门课程全班同学的成绩。

(2) 显示模块

显示所有录入的成绩。

(3) 计算模块

求出每门课的平均分,求出每个学生的平均成绩。

(4) 查询模块

查询某个同学的所有成绩。

(5) 统计模块

统计各个等级的人数及百分比。

(6) (同学们自己思考,看可不可以想增加一些其他的功能)