当前位置:首页 » 编程语言 » c语言程序设计报告学生成绩管理
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言程序设计报告学生成绩管理

发布时间: 2023-01-21 08:42:03

① 用c语言编程实现一个简单的学生成绩管理系统

C语言程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137

#include <stdio.h>
#include <string.h>

typedef struct student
{
char name[20]; /* 姓名 */
int code; /* 学号 */
int kor, eng, math; /* 3门课程的成绩 */
}STUDENT;

/* 返回输入数据 */
STUDENT Input();

/* 输出所有输入的数据 */
void Output(STUDENT info[], int cnt);

/* 将输入分数转换为A-F */
char grade(int score);

int main()
{
STUDENT S[10];
int cnt = 0, select;
int i, j;
int code;

while(1)
{
printf("\t学生信息管理系统\n\n");
printf("\t\t1\t添加\n");
printf("\t\t2\t删除\n");
printf("\t\t3\t查询\n");
printf("\t\t0\t结束\n");
printf("\t\t您的选择[0-3]:");
scanf("%d", &select);

if(select < 0 || select > 3)
continue;
if(select == 0)
{
printf("退出系统!\n");
break;
}

if(select == 1) /* 添加 */
{
S[cnt++] = Input();
}
else if(select == 2) /* 删除 */
{
printf("\t\t待删除学生的学号:");
scanf("%d", &code);

for(i=0; i<cnt; i++)
if(S[i].code == code)
break;
if(i >= cnt)
{
printf("学号不存在,删除失败!\n");
}
else {
for(j=i+1; j<cnt; j++)
{
strcpy(S[j-1].name, S[j].name);
S[j-1].code = S[j].code;
S[j-1].kor = S[j].kor;
S[j-1].eng = S[j].eng;
S[j-1].math = S[j].math;
}
cnt--;
printf("删除成功!\n");
}
}
else /* 查询 */
{
printf("\t\t待查找学生的学号:");
scanf("%d", &code);

for(i=0; i<cnt; i++)
if(S[i].code == code)
break;
if(i >= cnt)
{
printf("学号不存在,查找失败!\n");
}
else
{

② C语言程序设计 班级学生成绩管理系统

设计课题一:班级成绩管理系统

一、 问题描述:

对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。
二、功能要求:

1、本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。
2、本系统显示这样的菜单:
请选择系统功能项:
a、 成绩录入
b、 成绩显示
c、 成绩保存
d、 成绩排序
e、 成绩修改(要求先输入密码)
f、 成绩统计
(1) 显示每门课程成绩最高的学生的基本信息
(2) 显示每门课程的平均成绩
(3) 显示超过某门课程平均成绩的学生人数
g、 退出系统
3、执行一个具体的功能之后,程序将重新显示菜单。
4、将学生成绩保存到文件中。
三、算法提示:

1、数据结构:结构体类型数组。
2、数据库结构:下表构成该系统的基本数据库。

姓名 学号 课程名称1 课程名称2 ●●●●●●
char Char float float

四、测试数据:

学生人数N=10
课程门数M=4
课程名:数学、语文、英语、政治

五、其它
对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。
问题补充:
今天谁能给我答案啊!!!!!!!急急!!!!!!!
提问者: 342123465 - 一级
最佳答案
C语言课程设计报告—班级成绩管理系统
需要分析:
学生成绩管理系统有13种功能。把这13个功能做成13个子函数。在主函当数中设计一个菜单对这13个子数进行管理。来实现对整个系统的操作。
根据课题的要求。每一个学生的包括姓名(char)、学号(char)、M门课程的成绩(float).再加上系统功能上的要求每一学生的信息还要总分和名次等。所以自然的想到要用结构体来定义每一个学生的信息结构。然后用链表把它们组成一个有序的整体。用对链表的操作来实现对所有学生信息的统一管理(成绩显示、成绩排序、成绩修改等)。最后为了以后按照处理后的顺序保存到文件中。
. 各函数的功能:
概要设计:
程序的模块组成:
主 函 数: int main()
新建函数:STUDENT *init()
输入函数 :STUDENT *create()
显示函数: void print(STUDENT *head)
删除函数: STUDENT *delete(STUDENT *head)
按名字寻找函数: void lookup(STUDENT *head)
保存函数: void save(STUDENT *head)
按总分排序函数: STUDENT *sort(STUDENT *head)
计算总分和均分函数: void computer(STUDENT *h)
修改函数: STUDENT *Modify(STUDENT *head,STUDENT *new)
按学号排序函数: STUDENT *index(STUDENT *h)
菜单函数:int menu_select()
各个函数的主要功能:
输入函数: 随时输入数据。
菜单函数:显示系统主菜单。
显示函数: 显示所有学生的信息。
寻找函数: 方便学生查找自己的成绩。
删除函数: 删除某学生的信息。
排序函数: 按总成绩排序。
按学号排序函数: 按学号排序。
插入函数: 可以插入新的信息。
保存函数: 保存好学生成绩,以免丢失。
统计函数:
l 显示每门课程成绩最高的学生的基本信息。
l 显示每门课程的平均成绩。
l 显示超过某门课程平均成绩的学生人数。
课题的功能模块的划分:
开始
菜单界面
功能选择
初始化函数
输入学生信息
删除学生信息
显示学生信息
查找学生信息
按成绩排序
保存到文件
从文件读数据
插入学生成绩
分类合计
退出系统
结束
详细设计: 整个系统除了主函数外,另外还有14个函数,实现八大功能:输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。各个函数的详细设计说明分别如下:
主函数 main()
利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
菜单选择函数 int menu_select()
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,返回菜单。
代码设计: 初始化函数 STUDENT *init()
这是一个无参函数,里面只有两个语句,它的作用是使链表初始化,使head的值为NULL和一个清屏语句。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!
输入记录函数 STUDENT *create() 这是一个无参函数,用来执行学生成绩记录的输入,当学生为@时停止输入,函数结束后,带回一个链表头的指针指向一下个学生的信息插在表头。
N-S流程图如下:
head=NULL无条件循环
指针p指向新开辟的单元
指针p是否为空
是 否
输入学号p->num
输出 p->num是否为@
内存 是 否
溢出 输入姓名p->name
停止 for(i=0;i<3;i++)
输入 输入成绩
返回 p->sum=s;
菜单 p->average=(float)s/3;

显示记录函数 void print(STUDENT *head)

这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。

算法:先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。重复执行此步聚直到p指针指向NULL为止。

N-S流程图如下:

p=head,使指向第一个结点

输出p所指向的结点

p指向一下个结点

当p指的不是表尾

程序调试:

由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。解决的这个问题的办法是调整。最后还是老师帮我帮我们找到了问题的所在——for 循环的次超过了链表中结点的数量。再就是自定义函数时由于课本的概念不清楚,多写了空格键,以至函数调用不出来。又如:在设计修改学生信息时的密密码时。当用户发现输入密码错误按了退格键后,因为“*”并没有消去。导致用户再次按退格键,又出现前面的情况。最终导致输入密码错误。所以用了两次退格键:

在对链表操作时,要特别链表指针的移动(p=p->next)和链表尾的判断 (p= =NULL)。没有指针的移动,就很容易出现死循环。而在运行过程中不能控制。所以你就会认为是死机。如果没有链表尾的判断。就会在运行过程出现想不到的错误。如:在显示链表信息时,后面就会出现乱码。

一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用你设计的这个系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。

予我耐心解答的老师和同学,是他们为我小程序的成功起到了关键性的作用,那么多个日夜,如此多的困难,同学们勤恳塌实,从开始到结束,没有显出一点倦意,始终热情高涨,我感谢这种氛围,感谢学校提供的良好条件。

回顾起此次课程设计,至今我仍感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。

本次课程设计结束了,对于我的影响很大。我通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我知道自己哪些方面做得还不够。

但我出总结出了一点点的经验如下:

1、要对系统的功能和要求做出详细的分析,并合理分解任务。
2、把分解出来的子任务,做给一个相对独立的模块。
3、在设计一个模块之前,要简单构想一下总界面的显视情况。
4、针对构想出来的界面进行程序的编写。
最后,感谢老师您对我的指导和从百忙中抽空看我的设计,谢谢!

附件:
源程序:
#include "stdio.h" /*I/O函数*/
#include "stdlib.h" /*其它说明*/
#include "string.h" /*字符串函数*/
#include "conio.h" /*屏幕操作函数*/
#include "mem.h" /*内存操作函数*/
#include "ctype.h" /*字符操作函数*/
#include "alloc.h" /*动态地址分配函数*/
#include "dos.h"
#define N 4 /*定义常数*/
typedef struct z1 /*定义数据结构*/
{
char no[12];
char name[20];
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 lookup(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*读入记录*/
void computer(STUDENT *h); /*计算总分和均分*/
STUDENT *Modify(STUDENT *h); /*修改记录*/
void append(); /*追加记录*/
STUDENT *sort(STUDENT *h); /*按总分排序*/
STUDENT *index(STUDENT *h); /*按学号排序*/
int menu_select(); /*菜单函数*/
/******主函数开始*******/
main()
{
int i;
STUDENT *head; /*链表定义头指针*/
printf("\n\n\n\n\n\n\n\n\n");
printf(" * * ******* * ***** ***** * * ******* \n");
printf(" * * * * * * * ** * * * \n");
printf(" * * * * ******* * * * * * *** * ******* \n" );
printf(" * * * * * * * * * * * * * \n");
printf(" * * ******* ******* ***** * *** * * * ******* \n");
printf("\n");
printf("\n");
printf("\n");
sleep(2);
head=init(); /*初始化链表*/
clrscr(); /*清屏*/
for(;;) /*无限循环*/
{
switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/
{ /*值不同,执行的函数不同,break 不能省略*/
case 0:head=init();break; /*执行初始化*/
case 1:head=create();break; /*创建链表*/
case 2:print(head);break; /*显示全部记录*/
case 3:head=delete(head);break; /*删除记录*/
case 4:lookup(head);break; /*按名字查找记录*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*读文件*/
case 7:computer(head);break; /*计算总分和均分*/
case 8:head=Modify(head); break; /*修改记录,一般会插在表尾*/
case 9:head=sort(head);break; /*按部分排序*/
case 10:append();break; /*追加记录*/
case 11:head=index(head);break; /*按学号排序*/
case 12: exit(0); /*如菜单返回值为12程序结束*/
}
}
}
/*菜单函数,返回值为整数*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定义菜单字符串数组*/
" 00. init list", /*初始化*/
" 01. Enter list", /*输入记录*/
" 02. print list ", /*显示单链表中所有记录*/
" 03. Delete a record from list", /*从表中删除记录*/
" 04. Search record on name", /*按照姓名查找记录*/
" 05. Save the file", /*将单链表中记录保存到文件中*/
" 06. Load the file", /*从文件中读入记录*/
" 07. compute the score", /*计算所有学生的总分和均分*/
" 08. Modify an information ", /*修改某学号的信息*/
" 09. sort to make new file", /*排序*/
" 10. append record to file", /*追加记录到文件中*/
" 11. index on nomber", /*按学号排序*/
" 12. Quit"}; /*退出*/
char s[3]; /*以字符形式保存选择号*/
int c,i; /*定义整形变量*/
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 make by wenwei");
printf("\n Enter you choice(0~13):"); /*在菜单窗口外显示提示信息*/
scanf("%s",s); /*输入选择项*/
c=atoi(s); /*将输入的字符串转化为整形数*/
}while(c<0||c>14); /*选择项不在0~14之间重输*/
return c; /*返回选择项,主程序根据该数调用相应的函数*/
}
STUDENT *init()
{ clrscr();
return NULL;
}
/*创建链表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/
clrscr();
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]=='@') { clrscr();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; /*新输入结点为新的头结点*/
clrscr();
}
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| sc4| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|----|--------|--------|-----|\n");
while(p!=NULL) /*只要p不是尾结点,就输出记录*/
{
i++;
printf("|%3d|%-10s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->sum,p->average,p->order);
p=p->next;
}
printf("***********************************end**************************************\n");
getch(); /*输入任一键返回主菜单*/
clrscr(); /*清屏*/
}
/*删除记录*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/
char s[12]; /*存放学号*/
char *pass="wenwei28";
char a[20],b=NULL;
int i=0;
clrscr();
printf("Input your password:");
while((i<20)&&(b!='\r'))
{ b=getch(); /*无回显输入*/
if(b==8)
{ if(i>0)
{a[--i]=NULL;
putchar(8); /*退格键*/
putchar(' '); /*以空格代替*/
putchar(8);
}
else putchar(7); /*没有任何字符的退格,响铃警告*/
}
else if(b!='\r')
{ a[i++]=b; /*只要不是退格和回车就接受*/
putchar('*');
}
else
{a[i]=NULL; break; /*密码输入完了,记得加个NULL到后面*/
}
}
if(strcmp(a,pass)!=0)
{clrscr();
printf("Password is mistake Tow seconds to return!");
sleep(2);clrscr();return h;
}
else {printf("Password is OK! Welcome to come!"); sleep(3);
}
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);sleep(2);clrscr();return h;}
else /*p不为空,显示找到的记录信息*/
{
printf("*********************************have found********************************\n");
printf("|no | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");
printf("|------------|---------------|----|----|----|----|--------|--------|-----|\n");
printf("|%-12s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6-5.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[ q=p; /*保存当前结点的指针,作为下一结点的前驱*/
p=p->next; /*指针后移,新读入数据链到当前表尾*/
}
q->next=NULL; /*最后一个结点的后继指针为空*/
fclose(fp); /*关闭文件*/
printf("---You have success read data from file!!!---\n");
getch(); /*按任意键返回主菜单*/
clrscr();
return h; /*返回头指针*/
}
/*成绩统计*/
void computer(STUDENT *h)
{
STUDENT *p,*t,*q; /*定义移动指针*/
float saverage[N]={0}; /*均分初值为0*/
int i;
clrscr();
for (i=0;i<N;i++)
{ int n=0,j=0; /*保存记录条数初值为0*/
long s=0; /*总分初值为0*/
p=h; /*从头指针开始*/
while(p!=NULL) /*当p不为空时处理*/
{
s+=p->score[i]; /*累加总分*/
j++; /*统计记录条数*/
p=p->next; /*指针后移*/
h; /*返回头指针
}

③ 怎样用C语言写学生成绩管理系统

程序如下: #includex0dx0avoid main()x0dx0a{x0dx0a float student[100][7];x0dx0a//student[][0]存放学号,student[][1]到student[][4]存放四门成绩,x0dx0a//student[][5]存放总分,student[][6]存放平均分,student[][7]存放排名x0dx0a int n,i,j,k,p,t,count,flag;x0dx0a int a[100],b[100],c[100];x0dx0a//a[]存放排序后的下标,b[]存放总分(备份),c[]存放排名的数据x0dx0a printf("输入学生的个数:\n");x0dx0a scanf("%d",&n);x0dx0a for(i=0;i<=n-1;i++)x0dx0a {x0dx0a printf("输入第%d个学生的学号:",i+1);x0dx0a scanf("%f",&student[i][0]);x0dx0a for(j=0,student[i][5]=0;j<=3;j++)x0dx0a {x0dx0a printf("输入第%d个学生的第%d门成绩:",i+1,j+1);x0dx0a scanf("%f",&student[i][j+1]);x0dx0a student[i][5]+=student[i][j+1]; //计算总分x0dx0a }x0dx0a b[i]=student[i][5]; //把总分再赋给b[]数组,以后排序用x0dx0a student[i][6]=student[i][5]/4; //计算平均分x0dx0a }x0dx0a x0dx0a for(i=0;i<=n-2;i++) //对数组b[](即总分)进行排序x0dx0a for(j=0;j<=n-2-i;j++)x0dx0a {x0dx0a if(b[j]b[i+1])x0dx0a {x0dx0a c[i]=count;x0dx0a count++;x0dx0a }x0dx0a }x0dx0a printf("\n以下是统计结果:\n");x0dx0a printf("学号 s[1] s[2] s[3] s[4] 总分 平均分 排名\n");x0dx0a for(i=0;i<=n-1;i++)x0dx0a {x0dx0a printf("%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%f\t%d\n",student[a[i]][0],student[a[i]][1],student[a[i]][2],student[a[i]][3],student[a[i]][4],student[a[i]][5],student[a[i]][6],c[i]);x0dx0a }x0dx0a} 有疑问提出

④ 用c语言做一个学生成绩管理系统。。。。。

自己制作成绩查询系统成本高昂,建议使用易查分系统,三分钟即可搭建完成。

⑤ c语言编写查询学生成绩管理程序。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>struct record
{
char xuehao[10];//学号
char name[20]; //姓名
char sex[3];//性别
int ke1;//数学
int ke2 ;//语文
int ke3;//英语
int pin;
}stu[50];
int k=1,n,m;void readfile();
void seek();
void insert();
void del();
void save();
void menu();

void seek()
{int i,j,item,flag;<br>char s1[20];<br>printf("------------------\n");<br>printf("1.按学号查询\n");<br>printf("2.退出本菜单\n");<br>printf("------------------\n");<br>while(1)<br>{ printf("请选择子菜单编号:");<br>scanf("%d",&item);<br>flag=0;<br>switch(item)<br>{<br>case 1:<br>printf("请输入要查询的学生的学号:\n");<br>scanf("%s",s1);<br>for(i=0;i<n;i++)<br>if(strcmp(stu[i].xuehao,s1)==0)<br>{ flag=1;<br>printf("该学生学号,姓名,性别,数学,语文,英语 分别为:\n");<br>printf(" %s %s %s %d %d %d",stu[i].xuehao,stu[i].name,<br>stu[i].sex,stu[i].ke1,stu[i].ke2,stu[i].ke3);<br>}
if(flag==0)
printf("该学号不存在!\n"); break;
case 2:return;
default:printf("请在1-2之间选择\n");
}
}
}
void insert()
{ int i=n,j,flag;
printf("请输入待增加的学生数:\n");
scanf("%d",&m);
do
{ flag=1;
while(flag)
{ flag=0;
printf("请输入第 %d 个学生的学号:\n",i+1);
scanf("%s",stu[i].xuehao);
for(j=0;j<i;j++)
if(strcmp(stu[i].xuehao,stu[j].xuehao)==0)
{ printf("已有该学号,请检查后重新录入!\n");
flag=1;
break;
}
}
printf("请输入第 %d 个学生的姓名:",i+1);
scanf("%s",stu[i].name);
printf("\n请输入第 %d 个学生的性别:",i+1);
scanf("%s",stu[i].sex);
printf("\n请输入第 %d 个学生的数学成绩:",i+1);
scanf("%d",&stu[i].ke1);
printf("\n请输入第 %d 个学生的语文成绩:",i+1);
scanf("%d",&stu[i].ke2);
printf("\n请输入第 %d 个学生的英语成绩:",i+1);
scanf("%d",&stu[i].ke3);if(flag==0)
{ i=i;
i++;
}
}while(i<n+m);
n+=m;
printf("录入完毕!\n\n");
}void del()
{ int i,j,flag=0;
char s1[20];
printf("请输入要删除学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].xuehao,s1)==0)
{ flag=1;
for(j=i;j<n-1;j++)
stu[j]=stu[j+1];
}
if(flag==0)
printf("该学号不存在!\n");
if(flag==1)
{ printf("删除成功,显示结果请选择菜单6\n");
n--;
}
}
void readfile()
{
char buf[80],*p="student.dat";
FILE *fp;
int i=0;
if ((fp=fopen("student.dat","r"))==NULL)
{ printf("Open file %s error! Strike any key to exit!",p);
system("pause");
exit(0);
}
while(fscanf(fp,"%s%s%s%d%d%d",stu[i].xuehao,stu[i].name,
stu[i].sex,&stu[i].ke1,&stu[i].ke2,&stu[i].ke3)==6)
{ i++;
i=i;
}
fclose(fp);
n=i;
printf("录入完毕!\n");
}void save()
{ int i,j,k,flag=0;
FILE *fp;
fp=fopen("student.dat","w");
for(i=0;i<m;i++)
{
fprintf(fp,"%s%s%d%d%d",stu[i].xuehao,stu[i].name,stu[i].sex,&stu[i].ke1,
&stu[i].ke2,&stu[i].ke3);
fclose(fp);
printf("已储存");
}
}
void paixu()
{
int i,j,k,t;
for(i=0;i<m;i++)
{
stu[i].pin=(stu[i].ke1+stu[i].ke2+stu[i].ke3)/3;
}
for(i=0;i<=m-2;i++)
{
k=i;
for(j=i+1;j<=m-1;j++)
if(stu[j].pin<stu[k].pin)
k=j;
if(k!=i)
{
t=stu[k].pin;
stu[k].pin=stu[i].pin;
stu[i].pin=t;
}
}
for(i=0;i<m;i++)
{printf("第 %d 个学生的姓名%s:",i+1,stu[i].name);<br> printf("\n第 %d 个学生的性别:%s",i+1,stu[i].sex);<br> printf("\n第 %d 个学生的数学成绩:%d",i+1,stu[i].ke1);<br> printf("\n第 %d 个学生的语文成绩:%d",i+1,stu[i].ke2);<br> printf("\n第 %d 个学生的英语成绩:%d",i+1,stu[i].ke3);<br> printf("\n第 %d 个学生的平均成绩:%d",i+1,stu[i].pin);<br> }
}
void menu()
{ int nub;
printf(" \n\n学生成绩管理系统\n\n");
printf("*****系统功能菜单*****\n");
printf("----------------------\n");
printf("1.输入学生信息\n");
printf("2.查询学生信息\n");
printf("3.按学号删除信息\n");
printf("4.读入学生信息\n");
printf("5.保存信息(要把修改保存到文件,退出程序前必须执行本项)\n");
printf("6.查询学生平均成绩信息\n");
printf("0.退出系统\n");
printf("----------------------\n");
printf("请选择菜单编号:");
scanf("%d",&nub);
switch(nub)
{
case 1:insert();break;
case 2:seek();break;
case 3:del();break;
case 4:readfile();break;
case 5:save();break;
case 6:paixu();break;
case 0:k=0;break;
default:printf("请在0-6之间选择\n");
}}
void main()
{
while(k)
menu();
}
//平均数是排序后,输出的,如果你不想直接输入,那就不要对每个学生进行选择排序了

⑥ C语言程序设计学生成绩管理系统

#include "stdio.h"

/*定义学生结构体*/

struct Student

{

char ID[20];

char Name[20];

float Mark1;

float Mark2;

float Mark3;

float Average;

};

/*声明学生数组及学生数量*/

struct Student students[1000];

int num=0;

/*求平均值*/

float Avg(struct Student stu)

{

return (stu.Mark1+stu.Mark2+stu.Mark3)/3;

}

/*通过学号返回数组下标*/

int Student_SearchByIndex(char id[])

{

int i;

for (i=0;i<num;i++)

{

if (strcmp(students[i].ID,id)==0)

{

return i;

}

}

return -1;

}

/*通过姓名返回数组下标*/

int Student_SearchByName(char name[])

{

int i;

for (i=0;i<num;i++)

{

if (strcmp(students[i].Name,name)==0)

{

return i;

}

}

return -1;

}

/*显示单条学生记录*/

void Student_DisplaySingle(int index)

{

printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");

printf("-------------------------------------------------------------\n");

printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,

students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);

}

/*插入学生信息*/

void Student_Insert()

{

while(1)

{

printf("请输入学号:");

scanf("%s",&students[num].ID);

getchar();

printf("请输入姓名:");

scanf("%s",&students[num].Name);

getchar();

printf("请输入成绩:");

scanf("%f",&students[num].Mark1);

getchar();

printf("请输入成绩:");

scanf("%f",&students[num].Mark2);

getchar();

printf("请输入成绩:");

scanf("%f",&students[num].Mark3);

getchar();

students[num].Average=Avg(students[num]);

num++;

printf("是否继续?(y/n)");

if (getchar()=='n')

{

break;

}

}

}

/*修改学生信息*/

void Student_Modify()

{

float mark1,mark2,mark3;

while(1)

{

char id[20];

int index;

printf("请输入要修改的学生的学号:");

scanf("%s",&id);

getchar();

index=Student_SearchByIndex(id);

if (index==-1)

{

printf("学生不存在!\n");

}

else

{

printf("你要修改的学生信息为:\n");

Student_DisplaySingle(index);

printf("-- 请输入新值--\n");

printf("请输入学号:");

scanf("%s",&students[index].ID);

getchar();

printf("请输入姓名:");

scanf("%s",&students[index].Name);

getchar();

printf("请输入成绩:");

scanf("%f",&students[index].Mark1);

getchar();

printf("请输入成绩:");

scanf("%f",&students[index].Mark2);

getchar();

printf("请输入成绩:");

scanf("%f",&students[index].Mark3);

getchar();

students[index].Average=Avg(students[index]);

}

printf("是否继续?(y/n)");

if (getchar()=='n')

{

break;

}

}

}

/*删除学生信息*/

void Student_Delete()

{

int i;

while(1)

{

char id[20];

int index;

printf("请输入要删除的学生的学号:");

scanf("%s",&id);

getchar();

index=Student_SearchByIndex(id);

if (index==-1)

{

printf("学生不存在!\n");

}

else

{

printf("你要删除的学生信息为:\n");

Student_DisplaySingle(index);

printf("是否真的要删除?(y/n)");

if (getchar()=='y')

{

for (i=index;i<num-1;i++)

{

students[i]=students[i+1];

}

num--;

}

getchar();

}

printf("是否继续?(y/n)");

if (getchar()=='n')

{

break;

}

}

}

/*按姓名查询*/

void Student_Select()

{

while(1)

{

char name[20];

int index;

printf("请输入要查询的学生的姓名:");

scanf("%s",&name);

getchar();

index=Student_SearchByName(name);

if (index==-1)

{

printf("学生不存在!\n");

}

else

{

printf("你要查询的学生信息为:\n");

Student_DisplaySingle(index);

}

printf("是否继续?(y/n)");

if (getchar()=='n')

{

break;

}

}

}

/*按平均值排序*/

void Student_SortByAverage()

{

int i,j;

struct Student tmp;

for (i=0;i<num;i++)

{

for (j=1;j<num-i;j++)

{

if (students[j-1].Average<students[j].Average)

{

tmp=students[j-1];

students[j-1]=students[j];

students[j]=tmp;

}

}

}

}

/*显示学生信息*/

void Student_Display()

{

int i;

printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");

printf("-------------------------------------------------------------\n");

for (i=0;i<num;i++)

{

printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,

students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);

}

}

/*将学生信息从文件读出*/

void IO_ReadInfo()

{

FILE *fp;

int i;

if ((fp=fopen("Database.txt","rb"))==NULL)

{

printf("不能打开文件!\n");

return;

}

if (fread(&num,sizeof(int),1,fp)!=1)

{

num=-1;

}

else

{

for(i=0;i<num;i++)

{

fread(&students[i],sizeof(struct Student),1,fp);

}

}

fclose(fp);

}

/*将学生信息写入文件*/

void IO_WriteInfo()

{

FILE *fp;

int i;

if ((fp=fopen("Database.txt","wb"))==NULL)

{

printf("不能打开文件!\n");

return;

}

if (fwrite(&num,sizeof(int),1,fp)!=1)

{

printf("写入文件错误!\n");

}

for (i=0;i<num;i++)

{

if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)

{

printf("写入文件错误!\n");

}

}

fclose(fp);

}

/*主程序*/

main()

{

int choice;

IO_ReadInfo();

while(1)

{

/*主菜单*/

printf("\n------ 学生成绩管理系统------\n");

printf("1. 增加学生记录\n");

printf("2. 修改学生记录\n");

printf("3. 删除学生记录\n");

printf("4. 按姓名查询学生记录\n");

printf("5. 按平均成绩排序\n");

printf("6. 退出\n");

printf("请选择(1-6):");

scanf("%d",&choice);

getchar();

switch(choice)

{

case 1:

Student_Insert();

break;

case 2:

Student_Modify();

break;

case 3:

Student_Delete();

break;

case 4:

Student_Select();

break;

case 5:

Student_SortByAverage();

Student_Display();

break;

case 6:

exit();

break;

}

IO_WriteInfo();

}

}