Ⅰ 用c语言设计一个学生成绩管理系统
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#defineMAX1000
/*定义学生成绩信息结构*/
struct stu
{
char id[8];
char name[8];
(1)班级c语言成绩管理系统扩展阅读:
short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)
long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)
long long:修饰int,超长整型数据,可省略被修高桐饰的int。(C99标准新增)
signed:修饰整型数据,有符号数据类型。(C89标准新增)
unsigned:修饰整型数据,无符号数据类型。(K&R时期引入)
restrict:用于限定和约束指针,并表明指针是访问一戚圆坦个数据对象的唯一且初始的方式。(C99标准新增)
复杂类型关键字
struct:结构体声明。(K&R时期引入)
union:联合体声明。(K&R时期引入)
enum:枚举声明。(C89标准新增)
typedef:声明类型别名。(K&R时期引入)
sizeof:得到特定类型或特定类型变量的大小。(K&R时期引入)
inline:内联函数用于取代宏定义腔渣,会在任何调用它的地方展开。(C99标准新增)
Ⅱ c语言成绩管理系统
代码如下:
#include<stdio.h>
#include<string.h>
#define MAX 100 //学生最大数量
#defineCOURSE_N 3 //课程数
structStudent
{
unsignedint id; //学号
char name[20]; //姓名
int scores[COURSE_N]; //课程分数:语文、数学、英语
int sum; //总分
float average; //平均分
};
structStudentList{
structStudentstudents[MAX]; //学生慧念禅列表
intsize; //实际学生人数
};
structStudentListstudentList;
voidPrintStudents(structStudentList*pList)
{
inti;
printf("学号 姓名 语文 数学 英语 总分 平均分 ");
for(i=0;i<pList->size;i++){
printf("%d %s %d %d %d %d %.2f ",
pList->students[i].id,
pList->students[i].name,
pList->students[i].scores[0],
pList->students[i].scores[1],
pList->students[i].scores[2],
pList->students[i].sum,
pList->students[i].average);
}
printf(" ");
}
voidPrintStudent(structStudent*pStu)
{
inti;
printf("学号 姓名 语文 数学 英语 总分 平均分 ");
printf("%d %s %d %d %d %d %.2f ",
pStu->id,
pStu->name,
pStu->scores[0],
pStu->scores[1],
pStu->scores[2],
pStu->sum,
pStu->average);
printf(" ");
}
//通过学号查找学生
structStudent*FindStudentById(structStudentList*pList,unsignedintid)
{
inti;
for(i=0;i<pList->size;i++){
if(pList->students[i].id==id){
return&pList->students[i];
}
}
returnNULL;
}
//通过姓名查找学生
structStudent*FindStudentByName(structStudentList*pList,constchar*name)
{
inti;
for(i=0;i<pList->size;i++){
if(strcmpi((constchar*)pList->students[i].name,name)==0){
return&pList->students[i];
}
}
returnNULL;
}
//高禅添加学生
voidAddStudent(structStudentList*pList)
{
intok=0;
do{
printf("请输入学号:");
scanf("%d",&pList->students[pList->size].id);
if(FindStudentById(pList,pList->students[pList->size].id)!=NULL){
printf("学号重复! ");
}
else{
ok=1;
}
}while(!ok);
printf("请输入姓名:");
scanf("%s",pList->students[pList->size].name);
printf("请输入语文分数:");
scanf("%d",&pList->students[pList->size].scores[0]);
printf("请输入数学分前尘数:");
scanf("%d",&pList->students[pList->size].scores[1]);
printf("请输入英语分数:");
scanf("%d",&pList->students[pList->size].scores[2]);
pList->students[pList->size].sum=pList->students[pList->size].scores[0];
pList->students[pList->size].sum+=pList->students[pList->size].scores[1];
pList->students[pList->size].sum+=pList->students[pList->size].scores[2];
pList->students[pList->size].average=(float)pList->students[pList->size].sum/COURSE_N;
pList->size++;
printf("学生添加成功! ");
}
//修改学生信息
voidModifyStudent(structStudentList*pList)
{
intid;
structStudent*p=NULL;
printf("请输入学号:");
scanf("%d",&id);
p=FindStudentById(pList,id);
if(p!=NULL){
printf("请输入姓名:");
scanf("%s",p->name);
printf("请输入语文分数:");
scanf("%d",&p->scores[0]);
printf("请输入数学分数:");
scanf("%d",&p->scores[1]);
printf("请输入英语分数:");
scanf("%d",&p->scores[2]);
p->sum=p->scores[0];
p->sum+=p->scores[1];
p->sum+=p->scores[2];
p->average=(float)p->sum/COURSE_N;
printf("修改学生信息成功。 ");
}
else{
printf("没有找到学号为[%u]的学生。 ",id);
}
}
voidDeleteStudent(structStudentList*pList)
{
intid,index=-1,i;
printf("请输入学号:");
scanf("%d",&id);
for(i=0;i<pList->size;i++){
if(pList->students[i].id==id){
index=i;
break;
}
}
if(index!=-1){
for(i=index;i<pList->size-1;i++){
memcpy(&pList->students[i],&pList->students[i+1],sizeof(structStudent));
}
pList->size--;
printf("成功删除学号为[%d]的学生。 ",id);
}
else{
printf("没有找到学号为[%u]的学生。 ",id);
}
}
voidFindStudent(structStudentList*pList)
{
structStudent*p;
charname[20];
printf("请输入学生姓名:");
scanf("%s",name);
p=FindStudentByName(pList,name);
if(p!=NULL){
PrintStudent(p);
}
else{
printf("没有找到姓名为[%s]的学生。 ",name);
}
}
//按平均分排序
voidSortByAverage(structStudentList*pList)
{
inti,j;
structStudenttemp;
for(i=0;i<pList->size-1;i++){
for(j=i+1;j<pList->size;j++){
if(pList->students[i].average<pList->students[j].average){
memcpy(&temp,&pList->students[i],sizeof(structStudent));
memcpy(&pList->students[i],&pList->students[j],sizeof(structStudent));
memcpy(&pList->students[j],&temp,sizeof(structStudent));
}
}
}
}
intmain()
{
intexit=0;
intchoose=0;
while(!exit){
printf("------学生成绩管理系统------ ");
printf("1.增加学生记录 ");
printf("2.修改学生记录 ");
printf("3.删除学生记录 ");
printf("4.按姓名查询学生记录 ");
printf("5.按平均成绩排序 ");
printf("6.退出 ");
printf("请选择(1-6):");
scanf("%d",&choose);
switch(choose){
case1:
AddStudent(&studentList);
break;
case2:
ModifyStudent(&studentList);
break;
case3:
DeleteStudent(&studentList);
break;
case4:
FindStudent(&studentList);
break;
case5:
SortByAverage(&studentList);
PrintStudents(&studentList);
break;
case6:
exit=1;
break;
default:
printf("无效的选项。 ");
break;
}
}
printf("已退出系统! ");
return0;
}
运行结果:
Ⅲ 用C语言制作一个班级成绩管理系统
给你部分代码参考
/* 1。根据学生信息定义一个结构体类型,再说明扒凳一个该结构体类型的数组。*/
struct stu_info{
char stuNo[10];/* No */
char stuName[30];/* Name */
float stuScore[3];/* the three scores */
float aveScore; /* average score */
float totalScore; /* total score */
}stu[10];
/* 2。用input函数从键盘上输入10个学生的数据。 */
void input()
{ int i = 0;
printf("Input the students' infomation(FORMAT LIKE:No Name score1 score2 score3):\n");
while(i < 10)
{ printf("Input %d:",i + 1);
scanf("%s%s%f%f%f",stu[i].stuNo,stu[i].stuName,&stu[i].stuScore[0],&stu[i].stuScore[1],&stu[i].stuScore[2]);
i++;
}
}
/* 3。用average函数求出每个学生总尺塌成绩、春困旅平均成绩和所有学生的总平均成绩。 */
float average()
{ int i = 0;
float totalAve_score = 0;
while(i < 10)
{ stu[i].totalScore = stu[i].stuScore[0]+stu[i].stuScore[1]+stu[i].stuScore[2];
stu[i].aveScore = stu[i].totalScore/3;
totalAve_score += stu[i].aveScore;
i++; }
totalAve_score /= 10;
return totalAve_score; }
Ⅳ 用C编写班级成绩管理系统
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); /*如菜单返回值为14程序结束*/
}
}
}
/*菜单函数,返回值为整数*/
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语言成绩管理系统
#include"stdio.h"
structstu{
intsid,score;
charg;
};
voidscorein(structstu*p,intn){
inti,t;
for(i=0;i<n;i++){
scanf("%d%d",&p[i].sid,&p[i].score);
p[i].g=(t=p[i].score)>89&&t<101?'A':t>79&&t<90?'B':t>69&&t<80?'C':t>59&&t<70?'D':'E';
}
}
intsum(structstu*p,intn){
ints=0;
while(n--)
s+=p++->score;
returns;
}
voiddssort(structstu*p,intn){
inti,j,k;
structstut;
printf(" STUID SCORE CLASS ===================== ");
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(p[k].score<p[j].score)
k=j;
if(k!=i)
t=p[k],p[k]=p[i],p[i]=t;
printf("%d %d %c ",p[i].sid,p[i].score,p[i].g);
}
}
voididsort(structstu*p,intn){
inti,j,k;
structstut;
printf(" STUID SCORE CLASS ===================== ");
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(p[k].sid>p[j].sid)
k=j;
if(k!=i)
t=p[k],p[k]=p[i],p[i]=t;
printf("%d %d %c ",p[i].sid,p[i].score,p[i].g);
}
}
voidquery(structstu*p,intn){
intid;
printf(" PleaseenterID(int)... ");
scanf("%d",&id);
while(id-p->sid&&n)
p++,n--;
if(n>=0){
printf("STUID SCORE CLASS ===================== ");
printf("%d %d %c ",p->sid,p->score,p->g);
}
else
printf("Nofind! ");
}
voidlevel(structstu*p,intn){
intd[5],i;
chars[5][7]={"优秀","良好","中等","及格","不及格"};
printf("统计信息如下: ");
for(i=0;i<5;d[i++]=0);
for(i=0;i<n;i++,d[p++->g-'A']++);
for(i=0;i<5;i++)
printf("%6s: %d %.2f%% ",s[i],d[i],d[i]/(n+0.0)*100);
}
voidoutinfo(structstu*p,intn){
inti;
printf(" STUID SCORE ============= ");
for(i=0;i<n;i++)
printf("%d %d ",p[i].sid,p[i].score);
}
intmain(intargc,char*argv[]){
intn,s;
structstua[30];
printf("Pleaseentern(int0<n<31)... ");
if(scanf("%d",&n)!=1||n<1||n>30){
printf("Inputerror,exit... ");
return0;
}
scorein(a,n);//输入
dssort(a,n);//分数降序
idsort(a,n);//学号升序
query(a,n);//查询
level(a,n);//等级和百分比
outinfo(a,n);//输出各位学生信息
printf("总分:%d",s=sum(a,n));
printf("平均分:%.2f ",s/(n+0.0));
return0;
}
运行样例:
Ⅵ 用C语言编一个班级成绩管理系统
// test4.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
struct Student //学生结构体
{
char name[20]; //名字
char sex[10]; //性别
char zuanye[20]; //专业
char code[13]; //学号
char department[20]; //学院
char degree[20]; //稿缓学历
};
struct node
{
struct Student data;
struct node *next;
};
//---------------------------------------------------------------------------------
void print_menu(void) // 打印总菜单
{
printf(" |--------------------------------------------------|\n");
printf(" | 总 菜 单 : |\n");
printf(" |--------------------------------------------------|\n");
printf(" | 1--增加一个学生信息 | 5--删除一个学生信息 |\n");
printf(" | 2--显示一个学生信息 | 6--统计功能 |\n");
printf(" | 3--显示一个班级信息 | 7--结束 |\n"羡则);
printf(" | 4--修改一个学生信息 | \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 |\n");
printf(" |--------------------------------------------------|\n");
}
void print_menu4(void ) //打印修改功能
{
printf(" |--------------------------------------------------|\n");
printf(" | 修 改 功 能 : |\n");
printf(" |--------------------------------------------------|\n");
printf(" | 1--修改名字 | 5--修改学院 |\n");
printf(" | 2--修改性别 | 6--修改专业 |\n");
printf(" | 3--修改学号 | 7--不作修改 |\n");
printf(" | 4--修改学历 | \3 \3 \兄敬棚3 \3 \3 \3 \3 \3 \3 \3 \3 |\n");
printf(" |--------------------------------------------------|\n");
printf("再次选择选项 :");
}
void print_static_function_menu(void) //打印统计功能
{
printf(" |--------------------------------------------------|\n");
printf(" | 统 计 功 能 : |\n");
printf(" |--------------------------------------------------|\n");
printf(" | 1.男/女人数 | 3.一个专业人数 |\n");
printf(" | 2.一个班级人数 | 4.结束 |\n");
printf(" |--------------------------------------------------|\n");
printf("请选择选项:\n");
}
int compareCode(char a[],char b[]) //比较 判断是否是同一个班级
{
for(int i=0;i<9;i++)
if(a[i]!=b[i]) break;
if(i==9) return 1;
else return 0;
}
//-------------------------------------------------------------------------------------
void main() //主函数从这里开始
{
system("color 3");
printf("\n\n\n");
printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3\3\3\3\3 学 生 证 管 理 程 序 \3\3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3 作者: \3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
int choice;
struct node *studentlist=(struct node*)malloc(sizeof(struct node)); //学生链表头 //////////////////////////////////////////////////////////
studentlist->next=NULL;
struct node *temp=NULL;
struct node *p=(struct node*)malloc(sizeof(struct node));
char tempcode[13]; //临时学号
char tempclass[11]; //临时班级
char tempzuanye[20];//临时专业
int count=0;
int choice6,count_male,count_female;
const int sizeStu=sizeof(struct Student);
struct Student data;
FILE *fp;
if((fp=fopen("d:\\学生证管理程序.dat","rb"))==NULL)
{
fp=fopen("d:\\学生证管理程序.dat","wb");
}
fclose(fp);
fp=fopen("d:\\学生证管理程序.dat","rb");
while(fread(&data,sizeStu,1,fp)==1)
{
p->data=data;
p->next=NULL;
if(studentlist==NULL)
studentlist=p;
else
{ temp=studentlist;
while(temp->next!=NULL){temp=temp->next;}
temp->next=p;
}
p=(struct node*)malloc(sizeof(struct node));
}
fclose(fp);
print_menu(); //打印菜单
scanf("%d",&choice); //读进选项
while(choice!=7) //未遇到结束键
{
switch(choice)
{
//----------------------------------------------------------------
//选项1,增加学生学生证信息
case 1: //输入一个学生信息
p=(node*) malloc(sizeof(node));
printf("\n请输入姓名:");
scanf("%s",p->data.name);
printf("\n请输入性别(男/女):");
scanf("%s",p->data.sex);
printf("\n请输入学号(12位):");
scanf("%s",p->data.code);
printf("\n请输入学制(本科生/研究生):");
scanf("%s",p->data.degree);
printf("\n请输入学院:");
scanf("%s",p->data.department);
printf("\n请输入专业:");
scanf("%s",p->data.zuanye);
p->next=NULL;
//----------------------------------------------------------链表连接
if(studentlist==NULL) { studentlist=p; studentlist->next=NULL;}
else {
temp=studentlist;
while(temp->next!=NULL) ////////////////////
{
temp=temp->next;
}
temp->next=p;
p->next=NULL;
}
break;
//---------------------------------------------------------------------
//选项2,显示给定学生学生证信息
case 2: printf("\n请输入学生学号(12位数):");
scanf("%s",tempcode);
temp=studentlist;
while(temp!=NULL) //寻找响应的学生
{
if(strcmp(tempcode,temp->data.code)==0) break;
temp=temp->next;
}
if(temp==NULL) printf("\n不能找到该学生信息.\n");
else {
printf("------------------------------------------------\n");
printf("姓名: %s\n",temp->data.name);
printf("性别: %s\n",temp->data.sex);
printf("学号: %s\n",temp->data.code);
printf("学历: %s\n",temp->data.degree);
printf("学院: %s\n",temp->data.department);
printf("专业: %s\n",temp->data.zuanye);
printf("------------------------------------------------\n\n");
}
break;
//-----------------------------------------------------------------
//选项3,显示给定班级的学生信息
case 3:printf("\n请输入班级号 :"); //输入班级号
scanf("%s",tempclass);
while(strlen(tempclass)<10) //班级号位数小于10时,重新输入
{
printf("错误的班级号,请重新输入:");
scanf("%s",tempclass);
}
count=0; //班级学生数
temp=studentlist;
while(temp!=NULL) //检索链表,并打印相应学生的学生证信息
{
if(compareCode(tempclass,temp->data.code)) {//打印属于这个班级的学生
printf("-----------------------------------------------\n");
printf("姓名: %s\n",temp->data.name);
printf("性别: %s\n",temp->data.sex);
printf("学号: %s\n",temp->data.code);
printf("学历: %s\n",temp->data.degree);
printf("学院: %s\n",temp->data.department);
printf("专业: %s\n",temp->data.zuanye);
printf("-----------------------------------------------\n");
count++;
}
temp=temp->next;
}
if(count==0) printf("该班级还未有成员.\n");
break;
//-------------------------------------------------------------------
//选项4,修改给定学生的信息
case 4: printf("请输入要作修改的学生证号:");
scanf("%s",tempcode);
temp=studentlist;
while(temp!=NULL) //寻找响应的学生
{
if(strcmp(tempcode,temp->data.code)==0) break;
temp=temp->next;
}
if(temp==NULL) printf("\n找不到相应学生的信息.\n");//找不到相应的学生
else {
int choice2;
print_menu4();
scanf("%d",&choice2);
while(choice2!=7)
{
switch(choice2)
{
case 1:printf("修改名字:"); //修改名字
scanf("%s",temp->data.name);
break;
case 2:printf("修改性别:");//修改性别
scanf("%s",temp->data.sex);
break;
case 3:printf("修改学号:");//修改学号
scanf("%s",temp->data.code);
break;
case 4:printf("修改学历 :"); //修改学历
scanf("%s",temp->data.degree);
break;
case 5:printf("修改学院:"); //修改学院
scanf("%s",temp->data.department);
case 6:printf("修改专业:");//修改专业
scanf("%s",temp->data.zuanye);
break;
default: break;
}
printf("请选择选项:");
scanf("%d",&choice2); //再次选择菜单选项
}
}
break;
//----------------------------------------------------------------
//选项5,删除给定学号的学生
case 5: printf("\n输入学号 :"); //输入学号
scanf("%s", tempcode);
temp=studentlist;
p=temp;
while(temp!=NULL) //寻找相应的学生
{
if(strcmp(tempcode,temp->data.code)==0) break;
p=temp;
temp=temp->next;
}
if(temp==NULL) printf("\n找不到该学生信息.\n"); //找不到
else if(temp==studentlist) {studentlist=temp->next; free(temp);}
else {
p->next=temp->next;//找到时删除
free(temp);
}
break;
//------------------------------------------------------------------
//选项6,统计功能
case 6: print_static_function_menu();
scanf("%d",&choice6);//选择菜单选项
while(choice6!=4)
{
switch(choice6)
{
//选项1,统计男女个数
case 1:temp=studentlist;
count_male=0; //男生数
count_female=0; //女生数
while(temp!=NULL) //检索链表查找
{
if(strcmp(temp->data.sex,"男")==0) count_male++;
if(strcmp(temp->data.sex,"女")==0) count_female++;
temp=temp->next;
}
printf("男: %d\n",count_male);
printf("女: %d\n",count_female);
break;
//选项2,统计给定班级的人数
case 2:printf("请输入班级号:");
scanf("%s",tempclass); //给定班级
temp=studentlist;
count=0;
while(temp!=NULL) //检索链表查找
{
if(compareCode(temp->data.code,tempclass)==1) count++;
temp=temp->next;
}
printf("%s班级总人数为: %d\n",tempclass,count);
break;
case 3:printf("请输入专业:");
scanf("%s",tempzuanye); //给定专业
temp=studentlist;
count=0;
while(temp!=NULL) //检索链表查找
{
if(strcmp(temp->data.zuanye,tempzuanye)==0) count++;
temp=temp->next;
}
printf("%s专业总人数为: %d\n",tempzuanye,count);
break;
//缺省项
default: break;
}
printf("请选择选项:");
scanf("%d",&choice6);
}
break;
//-----------------------------------------------------------------
default:free(p); break;
}
if((fp=fopen("d:\\学生证管理程序.dat","wb"))==NULL)
{
printf("文件无法打开!");
return;
}
p=studentlist;
while(p)
{
fwrite(&p->data,sizeStu,1,fp);
p=p->next;
}
fclose(fp);
print_menu( );//打印菜单 进入循环
scanf("%d",&choice);
}
}
Ⅶ C语言怎么编一个简单的成绩管理系统
一个简单的成绩管理系统通常包括以下功能:
添加学生信息和成绩;
显示所有学生的信息和成绩;
根据学号或姓名查询学生信息和成绩;
根据学号或姓名修改学生信息和成绩;
根据学号或姓名删除学生信息和成绩。
下面是一个基于控制台的C语言实现的示例代码,演示了如何实现上述功能:
c
Copy code
#include <侍腊stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最多可管理的学生数
#define MAX_NAME_LEN 20 // 姓名最大长度
// 学生信息结构体
typedef struct {
int id; // 学号
char name[MAX_NAME_LEN];// 姓名
int score; // 成绩
} Student;
Student students[MAX_STUDENTS]; // 学生信息数组
int num_students = 0; // 当前学生数量
// 添加学生信息和成绩
void add_student() {
if (num_students >= MAX_STUDENTS) {
printf("已达到最大可管理的学生数!\n");
return;
}
printf("请输入学生的学号:");
scanf("%d", &students[num_students].id);
printf("请搏谈枯输入学生的姓名:");
scanf("%s", students[num_students].name);
printf("请输入学生的成绩:");
scanf("%d", &students[num_students].score);
num_students++;
printf("添加成功!\n");
}
// 显示所有学生的信基洞息和成绩
void show_all_students() {
if (num_students == 0) {
printf("暂无学生信息!\n");
return;
}
printf("%-10s %-20s %-10s\n", "学号", "姓名", "成绩");
for (int i = 0; i < num_students; i++) {
printf("%-10d %-20s %-10d\n", students[i].id, students[i].name, students[i].score);
}
}
Ⅷ 用C语言设计一个班级成绩管理系统
我帮你
c/c++编程有需求的可以到网络贴吧 codeblocks吧找我
Ⅸ 怎样用C语言写学生成绩管理系统
程序如下: #include