C语言学生成绩管理系统代码#includestdio.h
#includestring.h
//外部函数声明
void menu();
void line();
/* 定义全局变量其中n代表学生人数c语言成绩管理系统函数,ave[5]代表每科成绩c语言成绩管理系统函数的平均分c语言成绩管理系统函数,high[5]每科成绩的最高分c语言成绩管理系统函数,
min[5]代表每科成绩的最低分,student_ave[100]代表每个学生五门成绩的平均分*/
int n,i,j;
float ave[5]={0},high[5]={0},min[5]={0},student_ave[100];
//定义全局结构体
struct student
{
long int num;//学生学号
char name[20];//学生姓名
float score[5];//学生成绩
}stu[100];
//主函数开始
int main()
{
void enter();//enter:输入学生成绩函数(这是函数声明)
void export();//export:输出学生成绩函数(这是函数声明)
void stat();//stat:学生成绩统计函数(这是函数声明)
void rank();//rank:学生成绩排名函数(这是函数声明)
void query();//query:学生成绩查询函数(这是函数声明)
//定义内部变量
//界面框架
menu();
printf("学生成绩管理信息系统\n");
printf("请根据以下提示命令字符进行操作!\n");
printf("q:退出a:成绩输入p:成绩输出s:成绩统计w:成绩排名t:成绩查询\n");
menu();
//函数调用,选择成绩管理方式
【c语言成绩管理系统函数 c语言学生成绩管理系统函数】 printf("请选择成绩管理方式");
while(1)
{
char c;
printf("\n");
scanf("%c",c);
if (c=='q') printf("这是退出学生成绩管理信息系统函数\n\n");break;
switch(c)
{
case'a':enter();break;
case'p':export(); break;
case's':stat();break;
case'v':rank();break;
case't':query();break;
default:("命令无效 , 请重新输入!\n");
}
}
return 0;
}
//主函数部分结束
//定义函数
void menu()
{
printf("*******************************************************************************\n");
}
//定义下划线函数
void line()
{
printf("--------------------------------------------------------------------------------\n");
}
//定义学生成绩输入函数开始
void enter()
{
menu();
printf("学生成绩输入\n请按以下格式进行数据输入\n");
printf("请输入学生学号姓名");
printf(" 学号 学生姓名\n");
printf("请输入学生成绩");
printf(" A成绩 B成绩 C成绩 D成绩 E成绩\n");
printf("例如\n请输入学生学号姓名");
printf("2012060402,张三\n");
printf("请输入学生成绩");
printf("95.5,97.0,89.0,92.0,85.0\n");
menu();
//输入学生成绩格式备注
printf("\n请输入学生人数");
scanf("%d",n);
//用for循环输入学生成绩
for(i=0;in;i)
{
printf("请输入学生学号姓名");
scanf("%ld,%s",stu[i].num,stu[i].name);
printf("请输入学生成绩");
scanf("%f",stu[i].score[0]);
scanf("%f",stu[i].score[1]);
scanf("%f",stu[i].score[2]);
scanf("%f",stu[i].score[3]);
scanf("%f\n",stu[i].score[4]);
getchar();
student_ave[i]=(stu[i].score[0] stu[i].score[1] stu[i].score[2] stu[i].score[3] stu[i].score[4])/5;
//用for循环计算每科成绩z总分
for(j=0;j5;j)
{
ave[j]=ave[j] stu[i].score[j];
}
//用for循环得出每科成绩最高分
for(j=0;j5;j)
{
if(high[j]=stu[i].score[j])
{
high[j]=stu[i].score[j];
}
}
//用for循环得出每科成绩最低分
for(j=0;j5;j)
{
if(i==0)
{
min[j]=stu[i].score[j];
}
if(min[j]=stu[i].score[j])
{
min[j]=stu[i].score[j];
}
}
}
//学生成绩输入完成
//用for循环计算每科成绩平均分
for(j=0;j5;j)
{
ave[j]=ave[j]/n;
}
getchar();
menu();
printf("\n");
}
//定义学生成绩输入函数结束
//定义学生成绩输出函数开始
void export()
{
int i;
printf("学号姓名成绩A成绩B成绩C成绩D成绩E\n");
for(i=0;in;i)
{
printf("%9ld s %7.1f %7.1f %7.1f %7.1f %7.1f\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4]);
}
menu();
}
//定义学生成绩输出函数结束
//定义学生成绩统计函数开始
void stat()
{
printf("各科平均成绩如下!\n");
line();
printf("\n");
printf("成绩A成绩B成绩C成绩D成绩E\n");
//这是每科成绩平均分
for(i=0;i5;i)
{
printf(" %6.1f ",ave[i]);
}
printf("\n");
printf("\n");
//只是每科成绩的最高分
printf("各科最高分如下!\n");
line();
printf("\n");
printf("成绩A成绩B成绩C成绩D成绩E\n");
for(j=0;j5;j)
{
printf(" %6.1f ",high[j]);
}
printf("\n");
printf("\n");
//这是每科成绩最低分
printf("各科最低分如下!\n");
line();
printf("\n");
printf("成绩A成绩B成绩C成绩D成绩E\n");
for(i=0;i5;i)
{
printf(" %6.1f ",min[i]);
}
printf("\n");
printf("\n");
}
//定义学生成绩统计函数结束
//定义学生成绩排名函数开始
void rank()
{
int k=1,z;
float t=0;
float student_high[100]={0};
printf("学生成绩排名如下:\n\n");
line();
printf("\n");
printf("名次学号姓名成绩A成绩B成绩C成绩D成绩E平均分 \n");
//把每个学生五门课的成绩按从大到小的顺序排列并存在数组student_high[]中去
for(i=0;in;i)
{
student_high[i]=student_ave[i];
}
for(j=0;jn;j)
{
for(i=0;in-j;i)
{
if(student_high[i]=student_high[i 1])
{
t=student_high[i 1];
student_high[i 1]=student_high[i];
student_high[i]=t;
}
}
}
//按成绩排名输出学生成绩信息
for(i=0;in;i)
{
for(j=0;jn;j)
{
if(student_high[i]==student_high[i 1])
{
i;
}
if(student_high[i]==student_ave[j])
{
printf("%d %ld s %7.1f %7.1f %7.1f %7.1f %7.1f %7.1f\n",k,stu[j].num,stu[j].name,
stu[j].score[0],stu[j].score[1],stu[j].score[2],stu[j].score[3],stu[j].score[4],student_ave[j]);
for(z=j 1;zn;z)
{
if(student_high[i]==student_ave[z])
{
k;
}
}
}
}
k;
}
line();
printf("\n");
}
//定义学生成绩排名函数结束
//定义学生成绩查询函数开始
void query()
{
//查询成绩格式
char c2,shu_name[20];//c2代表查询成绩控制字符 。shu_name[]代表输入查询姓名,shu_num代表输入查询学号
int shu_num;
menu();
printf("学生成绩查询\n请按以下方式查询\na:按学生姓名查询b:按学生学号查询q:退出\n");
menu();
printf("\n\n");
//选择查询方式
while(c2!='q')
{
printf("请选择查询成绩方式");
scanf("%c",c2);
getchar();
//按姓名查询成绩
if(c2=='a')
{
line();
printf("请输入学生姓名");
scanf("%s",shu_name);
getchar();
for(i=0;in;i)
{
if(strcmp(shu_name,stu[i].name)==0)
{
printf("学号姓名成绩A成绩B成绩C成绩D成绩E\n");
printf("%ld s %7.1f %7.1f %7.1f %7.1f %7.1f\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4]);
}
else if(shu_name!=stu[i].namei==(n-1))
{
printf("无此学生成绩\n");
}
}
line();
printf("\n");
}
//按学号查询成绩
else if(c2=='b')
{
line();
printf("请输入学生学号");
scanf("%d",shu_num);
getchar();
for(i=0;in;i)
{
if(shu_num==stu[i].num)
{
printf("学号姓名成绩A成绩B成绩C成绩D成绩E\n");
printf("%ld s %7.1f %7.1f %7.1f %7.1f %7.1f\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4]);
}
else if(shu_num!=stu[i].numi==(n-1))
{
printf("无此学生成绩\n");
}
}
line();
printf("\n");
}
}
line();
printf("\n\n");
}
//定义学生成绩查询函数结束
用C语言编一个班级成绩管理系统// testzhidao4.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;i9;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=https://www.04ip.com/post/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)
{
//----------------------------------------------------------------
//选项1c语言成绩管理系统函数,增加学生学生证信息
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;
//---------------------------------------------------------------------
//选项2c语言成绩管理系统函数,显示给定学生学生证信息
case 2: printf("\n请输入学生学号(12位数):");
scanf("%s",tempcode);
temp=studentlist;
while(temp!=NULL) //寻找响应c语言成绩管理系统函数的学生
{
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代码
/*头文件*/
#include stdio.h
#includedos.h
#includestdlib.h/*其它说明*/
#includestring.h/*字符串函数*/
#includemem.h/*内存操作函数*/
#includectype.h/*字符操作函数*/
#includealloc.h/*动态地址分配函数*/
#define LEN sizeof(STUDENT)
typedef struct stu/*定义结构体数组用于缓存数据*/
{char num[6];
char name[5];
int score[3];
int sum;
float average;
int order;
struct stu *next;
}STUDENT;
/*函数原型*/
STUDENT*init();/*初始化函数*/
int menu_select();/*菜单函数*/
STUDENT *create();/*创建链表*/
void print(STUDENT *head);/* 显示全部记录*/
void search(STUDENT *head);/*查找记录*/
STUDENT *delete(STUDENT *head);/*删除记录*/
STUDENT *sort(STUDENT *head);/*排序*/
STUDENT *insert(STUDENT *head,STUDENT *new);/*插入记录*/
void save(STUDENT *head);/*保存文件*/
STUDENT *load();/*读文件*/
/*主函数界面*/
main()
{STUDENT *head,new;
head=init();/*链表初始化,使head的值为NULL*/
for(;;)/*循环无限次*/
{switch(menu_select())
{
case 1:head=create();break;
case 2:print(head);break;
case 3:search(head);break;
case 4:head=delete(head);break;
case 5:head=sort(head);break;
case 6:head=insert(head,new);break;/*new表示返回地址*/
case 7:save(head);break;
case 8:head=load(); break;
case 9:exit(0);/*如菜单返回值为9则程序结束*/
}
}
}
/*初始化函数*/
STUDENT *init()
{
return NULL;/*返回空指针*/
}
/*菜单选择函数*/
menu_select()
{int n;
struct date d;/*定义时间结构体*/
getdate(d);/*读取系统日期并把它放到结构体d中*/
printf("press any key to enter the menu......");/*按任一键进入主菜单*/
getch();/*从键盘读取一个字符,但不显示于屏幕*/
clrscr();/*清屏*/
printf("********************************************************************************\n");
printf("\t\tWelcome to\n");
printf("\n\t\tThe student score manage system\n");
printf("*************************************MENU***************************************\n");
printf("\t\t\t1. Enter the record\n");/*输入学生成绩记录*/
printf("\t\t\t2. Print the record\n");/*显示*/
printf("\t\t\t3. Search record on name\n");/*寻找*/
printf("\t\t\t4. Delete a record\n");/*删除*/
printf("\t\t\t5. Sort to make new a file\n");/*排序*/
printf("\t\t\t6. Insert record to list\n");/*插入*/
printf("\t\t\t7. Save the file\n");/*保存*/
printf("\t\t\t8. Load the file\n");/*读取*/
printf("\t\t\t9. Quit\n");/*退出*/
printf("\n\t\tMade by Hu Haihong.\n");
printf("********************************************************************************\n");
printf("\t\t\t\t%d\\%d\\%d\n",d.da_year,d.da_mon,d.da_day);/*显示当前系统日期*/
do{
printf("\n\t\t\tEnter your choice(1~9):");
scanf("%d",n);
}while(n1||n9);/*如果选择项不在1~9之间则重输*/
return(n);/*返回选择项,主函数根据该数调用相应的函数*/
}
/*输入函数*/
STUDENT *create()
{int i,s;
STUDENT *head=NULL,*p;/* 定义函数.此函数带回一个指向链表头的指针*/
clrscr();
for(;;)
{p=(STUDENT *)malloc(LEN);/*开辟一个新的单元*/
if(!p)/*如果指针p为空*/
{printf("\nOut of memory.");/*输出内存溢出*/
return (head);/*返回头指针,下同*/
}
printf("Enter the num(0:list end):");
scanf("%s",p-num);
if(p-num[0]=='0') break;/*如果学号首字符为0则结束输入*/
printf("Enter the name:");
scanf("%s",p-name);
printf("Please enter the %d scores\n",3);/*提示开始输入成绩*/
s=0;/*计算每个学生的总分 , 初值为0*/
for(i=0;i3;i)/*3门课程循环3次*/
{
do{
printf("score%d:",i 1);
scanf("%d",p-score[i]);
if(p-score[i]0 || p-score[i]100)/*确保成绩在0~100之间*/
printf("Data error,please enter again.\n");
}while(p-score[i]0 || p-score[i]100);
s=s p-score[i];/*累加各门成绩*/
}
p-sum=s;/*将总分保存*/
p-average=(float)s/3;/*先用强制类型转换将s转换成float型,再求平均值*/
p-order=0;/*未排序前此值为0*/
p-next=head;/*将头结点做为新输入结点的后继结点*/
head=p;/*新输入结点为新的头结点*/
}
return(head);
}
/* 显示全部记录函数*/
void print(STUDENT *head)
{int i=0;/* 统计记录条数*/
STUDENT *p;/*移动指针*/
clrscr();
p=head;/*初值为头指针*/
printf("\n************************************STUDENT************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Rec |Num|Name|Sc1|Sc2|Sc3|Sum|Ave| Order |\n");
printf("-------------------------------------------------------------------------------\n");
while(p!=NULL)
{
i;
printf("| = |%4s|%-4s|=|=|=|=|%4.2f|%-5d|\n",
i, p-num,p-name,p-score[0],p-score[1],p-score[2],p-sum,p-average,p-order);
p=p-next;
}
printf("-------------------------------------------------------------------------------\n");
printf("**************************************END**************************************\n");
}
/*查找记录函数*/
void search(STUDENT *head)
{STUDENT *p;/*移动指针*/
char s[5];/*存放姓名用的字符数组*/
clrscr();
printf("Please enter name for searching.\n");
scanf("%s",s);
p=head;/*将头指针赋给p*/
while(strcmp(p-name,s)p != NULL)/*当记录的姓名不是要找的,或指针不为空时*/
p=p-next;/*移动指针,指向下一结点*/
if(p!=NULL)/*如果指针不为空*/
{printf("\n*************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("|Num|Name|sc1|sc2|sc3|Sum|Ave| Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("|%4s|%4s|=|=|=|=|%4.2f|%-5d|\n",
p-num,p-name,p-score[0],p-score[1],p-score[2],p-sum,p-average,p-order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
}
else
printf("\nThere is no num %s student on the list.\n",s);/*显示没有该学生*/
}
/*删除记录函数*/
STUDENT *delete(STUDENT *head)
{int n;
STUDENT *p1,*p2;/*p1为查找到要删除的结点指针 , p2为其前驱指针*/
char c,s[6];/*s[6]用来存放学号,c用来输入字母*/
clrscr();
printf("Please enter the deleted num: ");
scanf("%s",s);
p1=p2=head;/*给p1和p2赋初值头指针*/
while(strcmp(p1-num,s)p1 != NULL)/*当记录的学号不是要找的,或指针不为空时*/
{p2=p1;/*将p1指针值赋给p2作为p1的前驱指针*/
p1=p1-next;/*将p1指针指向下一条记录*/
}
if(strcmp(p1-num,s)==0)/*学号找到了*/
{printf("**************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("|Num|Name|sc1|sc2|sc3|Sum|Ave| Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("|%4s|%4s|=|=|=|=|%4.2f|%-5d|\n",
p1-num,p1-name,p1-score[0],p1-score[1],p1-score[2],p1-sum,p1-average,p1-order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
printf("Are you sure to delete the student Y/N ?"); /*提示是否要删除,输入Y删除,N则退出*/
for(;;)
{scanf("%c",c);
if(c=='n'||c=='N') break;/*如果不删除,则跳出本循环*/
if(c=='y'||c=='Y')
{
if(p1==head)/*若p1==head , 说明被删结点是首结点*/
head=p1-next;/*把第二个结点地址赋予head*/
else
p2-next=p1-next;/*否则将一下结点地址赋给前一结点地址*/
n=n-1;
printf("\nNum %s student have been deleted.\n",s);
printf("Don't forget to save.\n");break;/*删除后就跳出循环*/
}
}
}
else
printf("\nThere is no num %s student on the list.\n",s);/*找不到该结点*/
return(head);
}
/*排序函数*/
STUDENT *sort(STUDENT *head)
{int i=0;/*保存名次*/
STUDENT *p1,*p2,*t,*temp;/*定义临时指针*/
temp=head-next;/*将原表的头指针所指的下一个结点作头指针*/
head-next=NULL;/*第一个结点为新表的头结点*/
while(temp!=NULL)/*当原表不为空时 , 进行排序*/
{
t=temp;/*取原表的头结点*/
temp=temp-next;/*原表头结点指针后移*/
p1=head;/*设定移动指针p1,从头指针开始*/
p2=head;/*设定移动指针p2做为p1的前驱,初值为头指针*/
while(t-averagep1-averagep1!=NULL)/*作成绩平均分比较*/
{
p2=p1;/*待排序点值小,则新表指针后移*/
p1=p1-next;
}
if(p1==p2)/*p1==p2,说明待排序点值大 , 应排在首位*/
{
t-next=p1;/*待排序点的后继为p*/
head=t;/*新头结点为待排序点*/
}
else/*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/
{
t-next=p1;/*t的后继是p1*/
p2-next=t;/*p2的后继是t*/
}
}
p1=head;/*已排好序的头指针赋给p1,准备填写名次*/
while(p1!=NULL)/*当p1不为空时 , 进行下列操作*/
{
i;/*结点序号*/
p1-order=i;/*将结点序号赋值给名次*/
p1=p1-next;/*指针后移*/
}
printf("Sorting is sucessful.\n");/*排序成功*/
return (head);
}
/*插入记录函数*/
STUDENT*insert(STUDENT *head,STUDENT *new)
{STUDENT *p0,*p1,*p2;
int n,sum1,i;
p1=head;/*使p1指向第一个结点*/
p0=new;/*p0指向要插入的结点*/
printf("\nPlease enter a new record.\n");/*提示输入记录信息*/
printf("Enter the num:");
scanf("%s",new-num);
printf("Enter the name:");
scanf("%s",new-name);
printf("Please enter the %d scores.\n",3);
sum1=0;/*保存新记录的总分,初值为0*/
for(i=0;i3;i)
{
do{
printf("score%d:",i 1);
scanf("%d",new-score[i]);
if(new-score[i]100||new-score[i]0)
printf("Data error,please enter again.\n");
}while(new-score[i]100||new-score[i]0);
sum1=sum1 new-score[i];/*累加各门成绩*/
}
new-sum=sum1;/*将总分存入新记录中*/
new-average=(float)sum1/3;
new-order=0;
if(head==NULL)/*原来的链表是空表*/
{head=p0;p0-next=NULL;}/*使p0指向的结点作为头结点*/
else
{while((p0-averagep1-average)(p1-next!=NULL))
{p2=p1;/*使p2指向刚才p1指向的结点*/
p1=p1-next;/*p1后移一个结点*/
}
if(p0-average=p1-average)
{if(head==p1)head=p0;/*插到原来第一个结点之前*/
else p2-next=p0;/*插到p2指向的结点之后*/
p0-next=p1;}
else
{p1-next=p0;p0-next=NULL;} /*插到最后的结点之后*/
}
n=n 1; /*结点数加1*/
head=sort(head);/*调用排序的函数,将学生成绩重新排序*/
printf("\nStudent%s have been inserted.\n",new-name);
printf("Don't forget to save the new file.\n");
return(head);
}
/*保存数据到文件函数*/
void save(STUDENT *head)
{FILE *fp;/*定义指向文件的指针*/
STUDENT *p;/* 定义移动指针*/
char outfile[10];
printf("Enter outfile name,for example c:\\score\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL)/*为输出打开一个二进制文件,为只写方式*/
{
printf("Cannot open the file\n");
return;/*若打不开则返回菜单*/
}
printf("\nSaving the file......\n");
p=head;/*移动指针从头指针开始*/
while(p!=NULL)/*如p不为空*/
{
fwrite(p,LEN,1,fp);/*写入一条记录*/
p=p-next;/*指针后移*/
}
fclose(fp);/*关闭文件*/
printf("Save the file successfully!\n");
}
/* 从文件读数据函数*/
STUDENT *load()
{STUDENT *p1,*p2,*head=NULL;/*定义记录指针变量*/
FILE *fp;/* 定义指向文件的指针*/
char infile[10];
printf("Enter infile name,for example c:\\score\n");
scanf("%s",infile);
if((fp=fopen(infile,"rb"))==NULL)/*打开一个二进制文件,为只读方式*/
{
printf("Can not open the file.\n");
return(head);
}
printf("\nLoading the file!\n");
p1=(STUDENT *)malloc(LEN);/*开辟一个新单元*/
if(!p1)
{
printf("Out of memory!\n");
return(head);
}
head=p1;/*申请到空间,将其作为头指针*/
while(!feof(fp))/*循环读数据直到文件尾结束*/
{
if(fread(p1,LEN,1,fp)!=1) break;/*如果没读到数据,跳出循环*/
p1-next=(STUDENT *)malloc(LEN);/*为下一个结点开辟空间*/
if(!p1-next)
{
printf("Out of memory!\n");
return (head);
}
p2=p1;/*使p2指向刚才p1指向的结点*/
p1=p1-next;/*指针后移,新读入数据链到当前表尾*/
}
p2-next=NULL;/*最后一个结点的后继指针为空*/
fclose(fp);
printf("You have success to read data from the file!\n");
return (head);
}
C语言成绩管理系统#include "stdio.h"
struct stu{
int sid,score;
char g;
};
void scorein(struct stu *p,int n){
int i,t;
for(i=0;in;i){
scanf("%d%d",p[i].sid,p[i].score);
p[i].g = (t=p[i].score)89t101 ? 'A' : t79t90 ? 'B' : t69t80 ? 'C' : t59t70 ? 'D' : 'E';
}
}
int sum(struct stu *p,int n){
int s=0;
while(n--)
s =p-score;
return s;
}
void dssort(struct stu *p,int n){
int i,j,k;
struct stu t;
printf("\nSTUID\tSCORE\tCLASS\n=====================\n");
for(i=0;in;i){
for(k=i,j=k 1;jn;j)
if(p[k].scorep[j].score)
k=j;
if(k!=i)
t=p[k],p[k]=p[i],p[i]=t;
printf("%d\t%d\t%c\n",p[i].sid,p[i].score,p[i].g);
}
}
void idsort(struct stu *p,int n){
int i,j,k;
struct stu t;
printf("\nSTUID\tSCORE\tCLASS\n=====================\n");
for(i=0;in;i){
for(k=i,j=k 1;jn;j)
if(p[k].sidp[j].sid)
k=j;
if(k!=i)
t=p[k],p[k]=p[i],p[i]=t;
printf("%d\t%d\t%c\n",p[i].sid,p[i].score,p[i].g);
}
}
void query(struct stu *p,int n){
int id;
printf("\nPlease enter ID(int)...\n");
scanf("%d",id);
while(id-p-sidn)
p,n--;
if(n=0){
printf("STUID\tSCORE\tCLASS\n=====================\n");
printf("%d\t%d\t%c\n\n",p-sid,p-score,p-g);
}
else
printf("No find!\n\n");
}
void level(struct stu *p,int n){
int d[5],i;
char s[5][7]={"优秀","良好","中等","及格","不及格"};
printf("统计信息如下:\n");
for(i=0;i5;d[i]=0);
for(i=0;in;i,d[p-g-'A']);
for(i=0;i5;i)
printf("%6s:\t%d\t%.2f%%\n",s[i],d[i],d[i]/(n 0.0)*100);
}
void outinfo(struct stu *p,int n){
int i;
printf("\nSTUID\tSCORE\n=============\n");
for(i=0;in;i)
printf("%d\t%d\n",p[i].sid,p[i].score);
}
int main(int argc,char *argv[]){
int n,s;
struct stu a[30];
printf("Please enter n(int 0n31)...\n");
if(scanf("%d",n)!=1 || n1 || n30){
printf("Input error, exit...\n");
return 0;
}
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\n",s/(n 0.0));
return 0;
}
运行样例c语言成绩管理系统函数:
关于c语言成绩管理系统函数和c语言学生成绩管理系统函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- jquery最好的分页插件,jq实现分页
- 任天堂格斗游戏街霸5系列,任天堂街头霸王游戏机操作
- 虚拟机如何换回主机,虚拟机如何换回主机配置
- 登陆页面的java代码 javaweb登录界面代码
- 什么直播可以挂网站,哪些直播可以挂链接
- 鲤城小程序搭建公司招聘,鲤城小程序搭建公司招聘
- ickb电脑直播,电脑直播教学
- go语言新建 go语言编写
- 怎么看视频号谁转发的,视频号怎么查谁转发了