c语言学生成绩查询系统代码
⑴ 【急!】用C语言编写简易学生成绩查询系统,C语言高手进!
睐口止
⑵ 用c语言实现一个简单的学生成绩管理系统,包括:学号,姓名,科目,成绩
//用字符界面实现,比如按数字1,可以录入学生所有信息;
//按数字2,显示所有学生成绩;
//按数字3,进入查询,按学号或姓名查询该学生是否存在,如果存在显示他的所有信息,///否则给出不存在提示。
#include<stdio.h>
structstudent
{
charnum[6];/*学号*/
charname[10];
charsubject[20];/*科目*/
floatgrade;
}stu[10];
voidmenu()
{
printf("==================================== ");
printf("|学生成绩管理系统| ");
printf("|1输入学生成绩| ");
printf("|2输出学生成绩| ");
printf("|3查询学生成绩| ");
printf("|0退出管理系统| ");
printf("==================================== ");
}
voidinput()
{
for(inti=0;i<10;i++)
scanf("%s%s%s%f",stu[i].num,stu[i].name,stu[i].subject,&stu[i].grade);
}
voidshow()
{
printf("学号 姓名 科目 成绩 ");
for(inti=0;i<10;i++)
printf("%s %s %s %f ",stu[i].num,stu[i].name,stu[i].subject,stu[i].grade);
}
voidserach()
{
charobj[10];
printf("输入要查询的学号");
scanf("%s",obj);
for(inti=0;i<10;i++)
{
if(strcmp(obj,stu[i].num))
{
printf("学号 姓名 科目 成绩 ");
printf("%s %s %s %f ",stu[i].num,stu[i].name,stu[i].subject,stu[i].grade);
}
}
}
intmain()
{
intselection;
while(true)
{
clrscr();
menu();
printf("请选择0--3:");
scanf("%d",&selection);
switch(selection)
{
case1:input();break;
case2:show();break;
case3:search();break;
case0:exit(0);break;
default:printf("错误的输入,请重新输入:");
}
}
return0;
}
⑶ c语言学生成绩管理系统的代码
晕,你自己不可以弄么?再说要弄一起鬼才能运行,知道工程么?
头文件:student.h
#ifndef H_STUDENT_HH
#define H_STUDENT_HH
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define INITIAL_SIZE 100
#define INCR_SIZE 50
#define NUM_SUBJECT 5
struct student_info
{
char number[15];
char name[20];
char gender[4];
float score[NUM_SUBJECT];
float sum;
float average;
int index;
};
typedef struct student_info StuInfo;
extern int numStus;
extern StuInfo* records;
extern char savedTag;
extern int arraySize;
extern char* subject[];
void handle_menu(void);
int menu_select(void);
void addRecord(void);
void modifyRecord(void);
void display(void);
void queryInfo(void);
void removeRecord(void);
void sortInfo(void);
int saveRecords(void);
int loadRecords(void);
void newRecords(void);
void quit(void);
void showTable(void);
int findRecord(char* target,int targetType,int from);
int getIndex(float sum);
void Record(StuInfo* src,StuInfo* dest);
#endif // H_STUDENT_HH
各个文件:
主界面student.c
#include "student.h"
int numStus=0;
StuInfo *records=NULL;
char savedTag=0;
int arraySize;
char* subject[]={"语文","数学","英语","物理","化学"};
int main()
{
records=(StuInfo*)malloc(sizeof(StuInfo)*INITIAL_SIZE);
if(records==NULL)
{
printf("momory fail!");
exit(-1);
}
arraySize=INITIAL_SIZE;
printf("\n");
printf("\t****************************************\n");
printf("\t* 这是一个 *\n");
printf("\t* 学生成绩管理程序 *\n");
printf("\t* 可以多学生成绩进行管理 *\n");
printf("\t* 欢迎使用管理程序 *\n");
printf("\t****************************************\n");
printf("\n");
handle_menu();
}
void handle_menu(void)
{
for( ; ; ){
switch(menu_select())
{
case 0:
addRecord();
break;
case 1:
modifyRecord();
break;
case 2:
display();
break;
case 3:
queryInfo();
break;
case 4:
removeRecord();
break;
case 5:
sortInfo();
break;
case 6:
saveRecords();
break;
case 7:
loadRecords();
break;
case 8:
newRecords();
break;
case 9:
quit();
}
}
}
int menu_select()
{
char s[2];
int cn=0;
printf("\n");
printf("\t0. 增加学生信息\n");
printf("\t1. 修改学生信息\n");
printf("\t2. 显示学生信息\n");
printf("\t3. 查询学生信息\n");
printf("\t4. 删除学生信息\n");
printf("\t5. 对学生信息进行排序\n");
printf("\t6. 保存学生信息至记录文件\n");
printf("\t7. 从记录文件读取学生信息\n");
printf("\t8. 新建学生信息文件\n");
printf("\t9. 结束运行\n");
printf("\n\t左边数字对应功能选择,请选择0-9: ");
for(; ;)
{
gets(s);
cn=atoi(s);
if(cn==0&&(strcmp(s,"0")!=0)) cn=11;
if(cn<0||cn>9) printf("\n\t输入错误,重选0-9: ");
else break;
}
return cn;
}
void newRecords(void)
{
char str[5];
if(numStus!=0)
{
if(savedTag==1)
{
printf("现在已经有记录,选择处理已有记录的方法。\n");
printf("是否保存原来的记录?(Y/N)");
gets(str);
if(str[0]!='n'&&str[0]!='N')
saveRecords();
}
}
numStus=0;
addRecord();
}
void quit(void)
{
char str[5];
if(savedTag==1)
{
printf("是否保存原来的记录? (Y/N)");
gets(str);
if(str[0]!='n'&&str[0]!='N')
saveRecords();
}
free(records);
exit(0);
}
排序模块sort.c
#include"student.h"
void sortInfo(void)
{
char str[5];
int i,j;
StuInfo tmps;
if(numStus==0)
{
printf("没有可供排序的记录!");
return;
}
printf("请输入您希望进行的排序方式:\n");
printf("1.按学号进行升序排序\n");
printf("2.按学号进行降序排序\n");
printf("3.按名称进行升序排序\n");
printf("4.按名称进行降序排序\n");
printf("5.按名次进行升序排序\n");
printf("6.按名次进行降序排序\n");
printf("7.按错了,我并不想进行排序\n");
gets(str);
if(str[0]<'1'||str[0]>'6')return;
for(i=0;i<numStus-1;i++)
{
for(j=i+1;j<numStus;j++)
{
if((str[0]=='1' && strcmp(records[i].number,
records[j].number)>0)||
(str[0]=='2' && strcmp(records[i].number,
records[j].number)<0)||
(str[0]=='3' && strcmp(records[i].name,
records[j].name)>0)||
(str[0]=='4' && strcmp(records[i].name,
records[j].name)<0)||
(str[0]=='5' &&
records[i].index>records[j].index)||
(str[0]=='6' &&
records[i].index<records[j].index))
{
Record(&records[i],&tmps);
Record(&records[j],&records[i]);
Record(&tmps,&records[j]);
}
}
}
printf("排序已经完成\n");
savedTag=1;
}
保存数据模块:
save_load.c
#include "student.h"
int saveRecords()
{
FILE *fp;
char fname[30];
if(numStus==0)
{
printf("没有记录可存");
return -1;
}
printf("请输入要存的文件名(直接回车选择文件stu_info):");
gets(fname);
if(strlen(fname)==0)
strcpy(fname,"stu_info");
if((fp=fopen(fname,"wb"))==NULL)
{
printf("不能存入文件!\n");
return -1;
}
printf("\n存文件…\n");
fwrite(records,sizeof(StuInfo)*numStus,1,fp);
fclose(fp);
printf("%d条件记录已经存入文件,请继续操作。\n",numStus);
savedTag = 0;
return 0;
}
int loadRecords(void)
{
FILE *fp;
char fname[30];
char str[5];
if(numStus!=0&&savedTag==0)
{
printf("请选择您是要覆盖现有记录(Y),还是将");
printf("读取的记录添加到现有记录之后(n)?\n");
printf("直接按回车则覆盖现有记录\n");
gets(str);
if(str[0]=='n'||str[0]=='N')
{//将读取的记录添加到现有记录之后
savedTag=1;
}
else
{
if(savedTag==1)
{//覆盖现有记录
printf("读取文件将会更改原来的记录,");
printf("是否保存原来的记录?(Y/n)");
gets(str);
if(str[0]!='n' && str[0]!='N')
saveRecords();
}
numStus=0;
}
}
printf("请输入要读取的文件名(直接按回车选择文件stu_info):");
gets(fname);
if(strlen(fname)==0)
strcpy(fname,"stu_info");
if((fp=fopen(fname,"rb"))==NULL)
{
printf("打不开文件!请重新选接\n");
return -1;
}
printf("\n取文件…\n");
while(!feof(fp))
{
//现在的数组空间不足,需要重新申请空间
if(numStus>=arraySize)
{
records=realloc(records,(arraySize+
INCR_SIZE)*sizeof(StuInfo));
if(records==NULL)
{
printf("memory failed!");
exit(-1);
}
arraySize=arraySize+INCR_SIZE;
}
if(fread(&records[numStus],
sizeof(StuInfo),1,fp)!=1)break;
//按照addRecord函数的方法,更新名次
records[numStus].index=
getIndex(records[numStus].sum);numStus++;
}
fclose(fp);
printf("现在共有%d条记录。",numStus);
return 0;
}
查询模块:
que_remv_modi.c
#include "student.h"
int findRecord(char* target,int targetType,int from)
{
int i;
for (i=from;i<numStus;i++)
{
if (( targetType==0&& strcmp(target,records[i].number)==0)||
(targetType==1 &&strcmp (target,records[i].name)==0 )||
(targetType==2 && atoi(target)==records[i].index))
return i;
}
return -1;
}
void queryInfo (void)
{
char str[5];
char target[20];
int type;
int count;
int i,j;
if (numStus==0)
{
printf ("没有可供查询的记录!");
return;
}
while(1)
{
printf ("请输入查询的方式:(直接输入回车则结束查询)\n");
printf ("1. 按学号\n");
printf ("2.按姓名\n");
printf ("3.按名次\n");
gets(str);
if (strlen(str)==0)
break;
if (str[0]=='1')
{ printf ("请输入欲查询的学生的学号:");
gets(target);
type=0;
}
else if (str[0]=='2')
{
printf("请输入欲查询的学生的姓名:");
gets(target);
type=1;
}
else
{
printf ("请输入欲查询的学生的名次:");
gets(target);
type=2;
}
i= findRecord(target,type,0);
if(i==1)
{
//打印查询到的学生的成绩
showTable();
}
count = 0;
while (i !=-1)
{
count++;
printf("%s\t%s\t%s",records[i].number,
records[i].name,records[i].gender);
for (j=0;j<NUM_SUBJECT;j++)
printf ("\t%.lf",records[i].score[j]);
printf ("\t%.lf\t%.lf\t%d\n",
records[i].sum,records[i].average,
records[i].index);
i = findRecord(target,type,i+1);
}
if (count==0)
printf ("没有符合条件的学生!\n");
else
printf ("一共找到了%d名学生的信息 \n\n",count);
}
}
/**********************
*删除指定的记录
***********************/
void removeRecord(void)
{char str[5];
char target[20];
int type;
int i,j;
int tmpi;
if(numStus==0)
{printf("没有可供删除的记录!");
return;
}
while(1)
{
printf("请输入如何找到欲删除的记录的方式;");
printf("(直接输入回车则结果移除操作)\n");
printf("1.按学号\n");
printf("2.按姓名\n");
printf("3.按名次\n");
gets(str);
if(strlen(str)==0)break;
if(str[0]=='1')
{printf("请输入学生的学号;");
gets(target);
type=0;
}
else if(str[0]=='2')
{printf("请输入学生的姓名");
gets(target);
type=1;
}
else
{printf("请输入学生的名次;");
gets(target);
type=2;
}
i=findRecord(target,type,0);
if(i==-1) printf("没有符合条件的学生!\n");
while (i!=-1)
{showTable();
printf("%s\t%s\t%s",records[i].number,records[i].name,records[i].gender);
for(j=0;j<NUM_SUBJECT;j++)
printf("\t%.1f",records[i].score[j]);
printf("\t%.1f\t%.1f\t%d\n",records[i].sum,records[i].average,records[i].index);
printf("确定要删除这个学生的信息吗?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{numStus--;
tmpi=records[i].index;
//将后面的记录前移
for(j=i;j<numStus;j++)
{
Record(&records[j+1],&records[j]);
}
//将名次排在被删记录后面的记录名次减1
for(j=0;j<numStus;j++)
{if(records[j].index>tmpi)
records[j].index--;
}}
//去下一个符合条件的记录
i=findRecord(target,type,i+1);
}}
savedTag = 1;
}
/********************************************
* 将src指向的一条记录复制给dest指向的记录
*********************************************/
void Record(StuInfo* src, StuInfo* dest)
{
int j;
strcpy(dest->number,src->number);
strcpy(dest->name,src->name);
strcpy(dest->gender,src->gender);
for (j=0; j<NUM_SUBJECT; j++)
{
dest->score[j] = src->score[j];
}
dest->sum = src->sum;
dest->average = src->average;
dest->index = src->index;
}
/*********************************
* 修改指定学生的信息
**********************************/
void modifyRecord(void)
{
char str[5];
char target[20];
int type;
int i,j;
int tmpi;
float sum,mark;
int count=0; // 总分大于sum的人数
if(numStus==0)
{
printf("没有可供修改的记录!");
return;
}
while(1) {
printf("请输入如何找到欲修改的记录的方式: ");
printf(" (直接输入回车则结束移除操作) \n");
printf("1. 按学号\n ");
printf("2. 按姓名\n ");
printf("3. 按名次\n ");
gets(str);
if(strlen(str)==0) break;
if(str[0]=='1')
{
printf("请输入该学生的学号: ");
gets(target);
type=0;
} else if(str[0]=='1')
{
printf("请输入该学生的姓名: ");
gets(target);
type=1;
} else
{
printf("请输入该学生的名次: ");
gets(target);
type=2;
}
i=findRecord(target,type,0);
if(i==-1) printf("没有符合条件的学生! \n");
while(i != -1)
{
showTable();
printf("%s\t%s\t%s",records[i].number,records[i].name,records[i].gender);
for(j=0;j<NUM_SUBJECT;j++)
printf("\t%.1f",records[i].score[j]);
printf("\t%.1f\t%.1f\t%d\n",records[i].sum,records[i].average,records[i].index);
printf("确定要修改这个学生的信息吗?(y/n)");
gets(str);
if (str[0]=='y' || str[0]=='Y')
{
tmpi=records[i].index;
printf("下面请输入该学生的信息: \n");
printf("请输入学号: ");
gets(records[i].number);
printf("请输入姓名: ");
gets(records[i].name);
printf("请输入性别 (0为女,1为男): ");
gets(str);
if (str[0]=='0')
strcpy(records[i].gender," 女 ");
else
strcpy(records[i].gender," 男 ");
sum=0;
for(j=0;j<NUM_SUBJECT;j++ )
{
printf("请输入%s成绩: ",subject[j]);
gets(str);
mark=(float)atof(str);
records[i].score[j]=mark;
sum+=mark;
}
records[i].sum=sum;
records[i].average=sum/NUM_SUBJECT;
// 将原来名次排被修改记录之后,而其sum小于等于
// 修改后记录的sum的记录的名次减1
// 将原来名次排在被修改记录之前或相同,而其sum
// 大于修改后记录的sum的记录的名次增1
count = 0;
for (j=0;j<numStus;j++)
{
if(j==i) continue;
if(records[j].index>tmpi && records[j].sum>sum)
records[j].index--;
else if(records[j].index<=tmpi && records[j].sum<sum)
records[j].index++;
if (records[j].sum>sum)
count++;
}
records[i].index=count+1;
}
i=findRecord(target,type,i+1);
}
}
savedTag = 1;
}
增加学生信息模块:
add_disp.c
#include "student.h"
void showTable(void)
{
int j;
printf("学号\t姓名\t性别");
for(j=0;j<NUM_SUBJECT;j++)
printf("\t%s",subject[j]);
printf("\t总分\t平均分\t名次\n");
}
void display(void)
{
int i,j;
if(numStus==0)
{
printf("没有可供显示的记录!");
return;
}
showTable();
for(i=0;i<numStus;i++)
{
printf("%s\t%s\t%s",records[i].number,records[i].name,records[i].gender);
for(j=0;j<NUM_SUBJECT;j++)
printf("\t%.1f",records[i].score[j]);
printf("\t%.1f\t%.1f\t%d\n",records[i].sum,records[i].average,records[i].index);
if(i%20==0&&i!=0)
{
printf("输入任一字符后继续...\n");
getch();
printf("\n");
showTable();
}
}
}
int getIndex(float sum)
{
int i;
int count=0;
for(i=0;i<numStus;i++)
{
if(records[i].sum<sum)
{
records[i].index++;
}
else if(records[i].sum>sum)
{
count++;
}
}
return count+1;
}
void addRecord(void)
{
char str[10];
int i,j;
float mark,sum;
if(numStus==0)
printf("原来没有记录,现在建立新表\n");
else
printf("下面在当前表的末尾增加新的信息\n");
while(1)
{
printf("你将要添加一组信息,确定吗?(Y/N)");
gets(str);
if (str[0]=='n' || str[0]=='N')
break;
if(numStus>=arraySize)
{
records=realloc(records,(arraySize+INCR_SIZE)*sizeof(StuInfo));
if(records == NULL)
{
printf("memory failed!");
exit(-1);
}
arraySize=arraySize+INCR_SIZE;
}
printf("请输入学号:");
gets(records[numStus].number);
printf("请输入姓名:");
gets(records[numStus].name);
printf("请输入性别(0为女,1为男):");
gets(str);
if(str[0]=='0')
strcpy(records[numStus].gender,"女");
else
strcpy(records[numStus].gender,"男");
sum=0;
for(j=0;j<NUM_SUBJECT;j++)
{
printf("请输入%s成绩:",subject[j]);
gets(str);
mark=(float)atof(str);
records[numStus].score[j]=mark;
sum+=mark;
}
records[numStus].sum=sum;
records[numStus].average=sum/NUM_SUBJECT;
records[numStus].index=getIndex(sum);
numStus++;
}
printf("现在一共有%d条信息\n",numStus);
savedTag=1;
}
void dispaly(void)
{
int i ,j;
if(numStus==0)
{
printf("没有可供显示的记录!");
return;
}
showTable();
for(i=0;i<numStus;i++)
{
printf("%s\t%s\t%s",records[i].number,records[i].name,records[i].gender);
for(j=0;j<NUM_SUBJECT;j++)
printf("\t%.1f\t%.1f\t%d\n",records[i].sum,records[i].average,records[i].index);
if(i%20==0&&i!=0)
{
printf("输入任一字符后继续...\n");
getch();
printf("\n\n");
showTable();
}
}
}
⑷ C语言编程—学生成绩查询系统!紧急!!!
这个是我自己做的类式的,你可以按自己的要求改下·不难的和你的差不多,给分哦
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define N 10
/*****定义结构体*****/
typedef struct students /*标记为students*/
{
char num[10]; /*学生学号*/
char name[10]; /*学生姓名*/
int age; /*年龄*/
char sex[10]; /*性别*/
float cyy; /*C语言成绩*/
float computer; /*计算机成绩*/
float english; /*英语成绩*/
float pj; /*平均成绩*/
}STU;
STU temp;
void sort(STU students[],int n); //排序
void save(STU students[] ,int n);//导出
int Locate(STU students[],int n);//查询
/*--------------显示菜单--------------------*/
char displaymenu()
{
char k;
system("cls");
printf(" 学生成绩管理 \n");
printf("-----------------------------------应用菜单-------------------------------------\n");
printf(" 1 输入学生成绩\n\n");
printf(" 2 输出学生成绩\n\n");
printf(" 3 查询学生成绩\n\n");
printf(" 4 修改学生成绩\n\n");
printf(" 5 查看成绩排序\n\n");
printf(" 6 查看成绩统计\n\n");
printf(" 7 保存数据\n\n");
printf(" 8 读取数据\n\n");
printf(" 9 退出系统\n\n");
printf(" 请选择你想进行的操作:");
k=getchar();
return k;
}
/*****定义输出函数*****/
void printheader() /*格式化输出表头*/
{
printf("\n\n************************学生成绩管理系统****************************\n\n\n");
printf("| 学号 | 姓名 | 年龄 | 性别 | C语言成绩 |计算机成绩 | 英语成绩| 平均成绩 | \n");
}
void printdata(STU pp) /*格式化输出表中数据*/
{
STU* p;
p=&pp;
printf("| %-5s| %-5s | %-4d| %-4s| %-6.0f| %-6.0f| %-5.0f| %-6.0f|\n",p->num,p->name,p->age,p->sex,p->cyy,p->computer,p->english,p->pj);
}
/*****添加学生信息*****/
int add(STU students[] ,int *n)
{
int i=0;
system("cls");
printf(" \n");
printf(" 请输入学生信息 \n");
printf(" 退出请在学生号处输入:0 \n");
printf("请输入学生学号:\n ");
scanf("%s",students[i].num);
while(strcmp(students[i].num,"0") )//当输入的学号为0时结束输入
{
printf("请输入学生姓名:\n ");
scanf("%s",students[i].name);
printf("****************\n\n\n");
printf("请输入学生年龄:\n ");
scanf("%d",&students[i].age);
printf("****************\n\n\n");
printf("请输入学生性别:\n");
scanf("%s",students[i].sex);
printf("****************\n\n\n");
printf("请输入C语言成绩:\n ");
scanf("%f",&students[i].cyy);
printf("****************\n\n\n");
printf("请输入计算机成绩:\n ");
scanf("%f",&students[i].computer);
printf("****************\n\n\n");
printf("请输入英语成绩:\n ");
scanf("%f",&students[i].english);
printf("****************\n\n\n");
students[i].pj=(students[i].cyy+students[i].computer+students[i].english)/3;
printf("学生平均成绩: %-8.0f\n",students[i].pj);
i++;
printf("****************\n\n\n");
printf("请输入学生学号:\n ");
scanf("%s",students[i].num);
}
*n=i;
save(students ,i);
return i;
}
/*****查询学生信息函数*****/
int Locate(STU students[],int n)
{
int k,m=-1;
char num[10],name[20];
int i=0;
system("cls");
printf(" 退出请输入:0 \n");
printf("请选择以什么方式查询:1).按学生学号查询 2).按学生姓名查询 \n");
scanf("%d",&k);
if(k==1)
{
printf("请输入你要查询的学生学号:\n");
scanf("%s",num);
while(i<n)
{
if(strcmp(students[i].num,num)==0) /*若找到学号*/
{
printf(">>学生学号:%s\n*学生姓名:%s\n*学生年龄:%d\n*学生性别:%s\n>C语言成绩:%-8.0f\n>计算机成绩:%-8.0f\n>>英语成绩:%-8.0f\n>>平均成绩:%-8.0f\n",students[i].num,students[i].name,students[i].age,students[i].sex,students[i].cyy,students[i].computer,students[i].english,students[i].pj);
m=i;
getchar();
break;
}
i++;
}
if(i>=n)
printf("没有所找学生信息\n");
getchar();
}
else if(k==2)
{
printf("请输入你要查询的学生姓名:\n");
scanf("%s",name);
while(i<n)
{
if(strcmp(students[i].name,name)==0) /*若找到姓名*/
{ printf("学生学号:%s\n学生姓名:%s\n学生年龄:%d\n学生性别:%s\n学生C语言成绩:%-8.0f\n计算机成绩:%-8.0f\n英语成绩:%-8.0f\n平均成绩:%-8.0f\n",students[i].num,students[i].name,students[i].age,students[i].sex,students[i].cyy,students[i].computer,students[i].english,students[i].pj);
m=i;
getchar();
break;
}
i++;
}
if(i>=n)
printf("没有所找学生信息\n");
}
return m;/*返回一个根m便于修改学生信息*/
getchar();
}
/*****显示函数*****/
void input(STU students[],int n)
{
int i;
system("cls"); //清屏
if(n==0) /*表示没有学生信息记录*/
{
printf("\n没有学生记录!\n");
}
printf("\n\n");
printheader(); /*输出表格头部*/
i=0;
while(i<n) /*逐条输出数组中存储的学生信息*/
{
printdata(students[i]);
i++;
}
getchar();
}
/*****修改子程序*****/
void Modify(STU students[],int n)
{
int i;
if(n<=0)
{
system("cls");
printf(" \n退出请输入:0 \n");
printf("\n----------not found!----------\n");
getchar();
return ;
}
system("cls");
printf("修改学生信息");
input(students,n);
i=Locate(students,n); /*查询到该数组元素,并返回下标值*/
if(i!=-1) /*若i!=-1,表明已经找到该数组元素*/
{
printf("请输入新的学生信息: \n");
printf(" 学号: ");
scanf("%s",students[i].num);
printf(" 姓名: ");
scanf("%s",students[i].name);
printf(" 年龄: ");
scanf("%d",&students[i].age);
printf(" 性别: ");
scanf("%s",students[i].sex);
printf(" C语言: ");
scanf("%f",&students[i].cyy);
printf(" 英语: ");
scanf("%f",&students[i].english);
printf(" 计算机: ");
scanf("%f",&students[i].computer);
students[i].pj=(students[i].cyy+students[i].english+students[i].computer)/3;
printf("平均成绩: %-9.0f\n",students[i].pj);
save(students ,n);
printf("\n-------------修改成功!-------------\n");
}
else
printf("not found!\n");
getchar();
}
/*****学生成绩排序子程序*****/
void sort(STU students[],int n)
{
int i,j,a,b,c,d,e,f,k;
float p;
printf(" \n退出请输入:0 \n");
printf("成绩排序方式选择: 1.按C语言 2.按英语 3.按平均 \n ");
scanf("%d",&k);
if(k==1) /*用选择法对C语言排序*/
{
for(i=0; i<n; i++)
for(j=0;j<n-1;j++)
{
if(students[i].english<students[j+1].english)
{
temp=students[i];
students[i]=students[j+1];
students[j+1]=temp;
}
}
}
else if(k==2)/*英语用冒泡法*/
{
for(a=0; a<n-1; a++)
{
c=a;
for(b=a+1; b<n; b++)
if(students[b].cyy>students[c].cyy)
c=b;
if (c!=a)
{
temp=students[a];
students[a]=students[c];
students[c]=temp;
}
}
}
if(k==3) /*平均成绩用插入法*/
{
for(d=1;d<n;d++)
{
p=students[d].pj;
for(e=0;e<d;e++)
if(students[e].pj<p)
break;
if(e==d)
continue;
for(f=d;f>e;f--)
students[f]=students[f-1];
students[e]=temp;
}
}
input(students,n); /*显示排序后的所有记录*/
save(students ,n);
printf("\n 排序完成!\n");
}
/*****统计学生分数在各等级的人数子程序*****/
void Tongji(STU students[],int n)
{
int count6085=0,count85=0,count60=0;
int i=0;
system("cls");
printf(" \n退出请输入:0 \n");
input(students,n);
i=0;
while(i<n)
{
if(students[i].pj>85) {count85++;i=i+1;continue;} /*平均成绩=>85*/
if(students[i].pj>=60&&students[i].pj<=85) {count6085++;i=i+1;continue;} /*60<平均成绩<85*/
if(students[i].pj<60) {count60++;i=i+1;continue;} /*平均成绩<60*/
}
printf("\n************统计结果************\n\n");
printf("平均成绩高于85分的人数:%d \n",count85);
printf(" \n");
printf("平均成绩在65分和80分之间的人数:%d \n",count6085);
printf(" \n");
printf("平均成绩低于60分的人数:%d \n",count60);
printf(" \n");
printf("\n\n**********统计结束**********");
getchar();
}
/*****导出或保存数据*****/
void save(STU students[],int n)
{
FILE* fp;
int i=0;
fp=fopen("students","wb+");/*以读写方式打开创建一个二进制文件*/
if(fp==NULL) /*打开文件失败*/
{
printf("\n*******打开文件错误!*******\n");
return ;
}
for(i=0;i<n;i++)
{
if(fwrite(&students[i],sizeof(STU),1,fp)==1)/*每次写一条记录或一个结构数组元素至文件*/
{
continue;
}
else
{
break;
}
}
if(i>0)
{
getchar();
printf("\n\n*共导出%d个学生信息*\n",i);
getchar();
}
else
{
system("cls");
printf("**没有信息导出*\n");
getchar();
}
fclose(fp); /*关闭此文件*/
}
/*****导入数据*****/
void Read(STU students[],int * n)
{
FILE* fp;
int i=0;
fp=fopen("students","rb");/*以只读方式打开一个已有的二进制文件*/
if(fp==NULL) /*打开文件失败*/
{
printf("\n********打开文件错误!********\n");
exit(0);
}
for(i=0;i<N;i++)
{
if(fread(&students[i],sizeof(STU),1,fp)==1)/*每次读一条记录或一个结构数组元素至文件*/
continue;
else
break;
}
*n=i;
if(i>0)
{
printf("\n\n************共导入:%d 个学生信息 ************\n",i);
getchar();
}
else
{ system("cls");
printf("************没有信息导入!************\n");
getchar();
}
getchar();
fclose(fp); /*关闭此文件*/
}
/*****主函数*****/
void main()
{
STU students[N];
int n;
char s1[3],s2[3]={"1"};
int i,k;
printf("\n\n");
printf("******************************************************\n");
printf("^ < 欢迎使用本软件> ^\n\n");
printf("^ <版本 : oooo> ^\n\n\n");
printf("^ <姓名>:卢景光 <班级>: 09623 <学号>:34 ^\n");
printf("^ ^\n");
printf("******************************************************\n");
printf("\n\n");
for(i=0;i<3;i++)
{
printf("\n请输入密码:");
gets(s1);
if(strcmp(s1,s2)==0)
break;
else
printf("\n>密码错误,请重新输入");
}
if(i>2)
{
printf("\n您已连续3次输错,系统将退出!\n");
exit(0);
}
else
{
while(1)
{
k=displaymenu();
switch(k)
{
case '1' : add(students,&n); break;
case '2' : Read(students,&n);input(students,n) ;break;
case '3' : Read(students,&n);Locate(students,n);break;
case '4' : Read(students,&n);Modify(students,n);;break;
case '5' : Read(students,&n);sort(students,n);break;
case '6' : Read(students,&n);Tongji(students,n); break;
case '7' : save(students,n) ;break;
case '8' : Read(students,&n);break;
case '9' : system("cls");
printf("\n **********谢谢您的使用**********\n");exit(0);break;
default : printf("\n\n输入错误,输入必须是0~9之间的一个数字!请重新输入\n");getchar();getchar();
}
}
}
}
⑸ 如何用C语言编写"学生成绩查询系统"
高点分我考虑 - -
⑹ 谁会学生成绩查询系统,麻烦发代码过来!!要C语言的
#include<iostream.h>
#include <fstream.h>
#include<iomanip.h>
#include<string.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LEN sizeof(Student)
typedef struct student //定义学生结点
{
int num;
char name[20];
int score[4];
int sum;
struct student *next;
}Student;
int n;
Student *cinn(); //成绩录入函数
Student *sort_1(Student *head,int); //选择排序 函数
void sort_2(Student *head); // //求当前高分及均分函数
void print(Student *head); //打印出当前成绩
Student *sort_all(Student *head); //学生成绩统计排序入口函数
void find(Student *head); //查询函数
Student *add_new(Student *head); //增加新学生信息函数
void deletee(Student *q,Student *p); //删除学生信息
void update(Student *p); //更新学生信息
void deletee(Student *q,Student *p)
{ q->next=p->next;
delete p;
}
void update(Student *p)
{
printf("\n请重新录入该生信息\n");
printf("\n请输入该学生的学号\n");
scanf("%d",&p->num);
printf("请输入该学生的语文成绩\n:");
scanf("%d",&p->score[0]);
printf("请输入该学生的数学成绩\n:");
scanf("%d",&p->score[1]);
printf("请输入该学生的英语成绩\n:");
scanf("%d",&p->score[2]);
printf("请输入该学生的计算机成绩\n:");
scanf("%d",&p->score[3]);
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3];
}
Student *cinn()
{
int flag; //暂存学号变量
Student *head,*p1,*p2;
n=0;
head=(Student *)malloc(LEN);
p2=head;
printf("\n请输入第%d名学生的学号,学号为0表示结束输入:",n+1);
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
n++;
p1=(Student *)malloc(LEN);
p1->num=flag;
printf("请输入第%d名学生的姓名:",n);
scanf("%s",p1->name);
printf("请输入第%d名学生的语文成绩:",n);
scanf("%d",&p1->score[0]);
printf("请输入第%d名学生的数学成绩:",n);
scanf("%d",&p1->score[1]);
printf("请输入第%d名学生的英语成绩:",n);
scanf("%d",&p1->score[2]);
printf("请输入第%d名学生的计算机成绩:",n);
scanf("%d",&p1->score[3]);
p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];
p2->next=p1;
p2=p1;
printf("\n请输入第%d名学生的学号,没有此学生则输入0表示结束:",n+1);
scanf("%d",&flag);
}
p2->next=NULL;
printf("\n\n");
return head;
}
Student *sort_all(Student *head) //学生成绩统计排序入口函数
{
int choose;
for(;;)
{
printf("\n\t\t# # # # # 学生成绩统计排序 # # # #\n");
printf("\t\t#\t1.按学生学号排序\t #\n");
printf("\t\t#\t2.按学生总分排序\t #\n");
printf("\t\t#\t3.按学生语文成绩排序\t #\n");
printf("\t\t#\t4.按学生数学成绩排序\t #\n");
printf("\t\t#\t5.按学生英语成绩排序\t #\n");
printf("\t\t#\t6.按学生计算机成绩排序\t #\n");
printf("\t\t#\t7.单科高分及均分\t #\n");
printf("\t\t#\t8.显示当前学生成绩\t #\n");
printf("\t\t#\t0.返回上一级菜单\t #\n");
printf("\t\t# # # # # 由张骏友情提供# # # # #\n\n");
printf("请输入你要执行的操作:");
scanf("%d",&choose);
while(getchar()!='\n');
switch(choose)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:head=sort_1(head,choose);break; //调用排序函数
case 7:print(head);sort_2(head);break;
case 8:print(head);break;
case 0:return head;
default: printf("\n\n您的输入有误!请重新输入:\n\n");break;
}
}
}
Student *sort_1(Student *head,int choose) //选择排序 函数
{
Student *p1,*p2=head->next,*pm,*px; //p2从第一个学生结点开始
Student mid;
if (!p2) return head; //判断链表是否为空
for(p1=p2;p1->next!=NULL;p1=p1->next)
{
pm=p1;
for(p2=p1->next;p2!=NULL;p2=p2->next)
switch(choose)
{
case 1:if (pm->num>p2->num) pm=p2;break; //按学号从小到达排序
case 2:if (pm->sum<p2->sum) pm=p2;break; //按总分从大到小排序
case 3:if (pm->score[0]<p2->score[0]) pm=p2;break;//按单科从大到小排序
case 4:if (pm->score[1]<p2->score[1]) pm=p2;break;
case 5:if (pm->score[2]<p2->score[2]) pm=p2;break;
case 6:if (pm->score[3]<p2->score[3]) pm=p2;break;
}
if (pm!=p1)
{
mid=*pm; //交换两个节点的内容
*pm=*p1;
*p1=mid;
px=pm->next;//交换两个节点的顺序
pm->next=p1->next;
p1->next=px;
}
}
printf("\n排序后的成绩表为:\n");
print(head); //打印出当前学生成绩报表
return head;
}
void sort_2(Student *head) //求当前高分及均分函数
{
Student *p=head->next; //从当前第一个学生开始
int max_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4;
int max_sum,min_sum;
int sum_1=0,sum_2=0,sum_3=0,sum_4=0; //总分
float aver_1,aver_2,aver_3,aver_4,aver_sum; //平均分
if (!p) return;
max_1=min_1=p->score[0];max_2=min_2=p->score[1]; //赋初值
max_3=min_3=p->score[2];max_2=min_2=p->score[3];
max_sum=min_sum=p->sum;
for(;p;p=p->next)
{
if (max_1<p->score[0]) max_1=p->score[0]; //求各科最大最小值
else if (min_1>p->score[0]) min_1=p->score[0];
if (max_2<p->score[1]) max_2=p->score[1];
else if (min_2>p->score[1]) min_2=p->score[1];
if (max_3<p->score[2]) max_3=p->score[2];
else if (min_3>p->score[2]) min_3=p->score[2];
if (max_4<p->score[3]) max_4=p->score[3];
else if (min_4>p->score[3]) min_4=p->score[3];
if (max_sum<p->sum) max_sum=p->sum;
else if (min_sum>p->sum) min_sum=p->sum;
sum_1+=p->score[0];sum_2+=p->score[1];sum_3+=p->score[2];sum_4+=p->score[3];
} //求各科总分 平均分
aver_1=1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_4=1.0*sum_4/n;
aver_sum=aver_1+aver_2+aver_3+aver_4; //求总分的平均分
printf("总共%d名学生,具体数据为:\n",n);
printf("语文最高分为%d,最低分为%d,平均分为%.2f\n",max_1,min_1,aver_1);
printf("数学最高分为%d,最低分为%d,平均分为%.2f\n",max_2,min_2,aver_2);
printf("英语最高分为%d,最低分为%d,平均分为%.2f\n",max_3,min_3,aver_3);
printf("计算机最高分为%d,最低分为%d,平均分为%.2f\n",max_4,min_4,aver_4);
printf("总分最高分为%d,最低分位%d,平均分为%.2f\n",
max_sum,min_sum,aver_sum);
}
void find(Student *head) //查找对应信息的学生
{
Student *p,*q;
int choose,fnum;
char tem[20];
if (n==0) {printf("\n当前系统没有任何学生数据,您就别费劲了!\n ");return;}
for(;;)
{
printf("\n请输入您要查询学生的方式:\n\n");
printf("1、按学号查询;2、按姓名查询;0、我不查询了。\n\n");
printf("请选择:");
scanf("%d",&choose);
while(getchar()!='\n');
if (choose==1)
{
printf("\n请输入你要查询的学生的学号,输入0退出学号查询:");
scanf("%d",&fnum);
for(;fnum;)
{
for(p=head->next;p!=NULL&&p->num!=fnum;p=p->next);
if (!p)
{
printf("\n\n找不到你要查询的学号,请重新输入,输入0表示结束:");
scanf("%d",&fnum);
}
else if (p->num==fnum)
{for(q=head->next;q->next!=p;q=q->next);
printf("\n学号为%d学生的数据为:\n",p->num);
printf("学号\t姓名\t语文成绩 数学成绩 英语成绩 计算机\
成绩 总分\n");
printf("%d\t%s\t %d %d %d %d \
%d\n",p->num,
p->name,p->score[0],p->score[1],p->score[2],p->score[3],
p->sum);
printf("\n\n请选择后续操作 1.修改该学生信息 2.删除该学生信息 输入0退出学号查询\n");
int choosel;
scanf("%d",&choosel);
for(;choosel;)
{
if(choosel==1)
{
update(p);
printf("\n\n请继续选择后续操作:1.再次修改 2.删除该生 0表示退出");
scanf("%d",&choosel);
}
else if(choosel==2)
{deletee(q,p);
printf("\n\n请继续选择后续操作:0表示退出");
scanf("%d",&choosel);
}
}
printf("\n\n请输入你还要查询的学生的学号,输入0表示不按学\
号查询了:");
scanf("%d",&fnum);
}
}
}
else if (choose==2)
{
printf("\n请输入你要查询的学生的姓名,输入0退出姓名查询:");
scanf("%s",tem);
for(;strcmp(tem,"0");)
{
for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next);
if (!p)
{
printf("\n\n找不到你要查询的姓名,请重新输入,输入0表\
示结束:");
scanf("%s",tem);
}
else if (!strcmp(p->name,tem))
{for(q=head->next;q->next!=p;q=q->next);
printf("\n姓名为%s学生的数据为:\n",p->name);
printf("学号\t姓名\t语文成绩 数学成绩 英语成绩 \
计算机成绩 总分\n");
printf("%d\t%s\t %d %d %d \
%d %d\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],
p->score[3],p->sum);
printf("\n\n请选择后续操作 1.修改该学生信息 2.删除该学生信息 输入0退出学号查询\n");
int choosel;
scanf("%d",&choosel);
for(;choosel;)
{
if(choosel==1)
{
update(p);
printf("\n\n请继续选择后续操作:1.再次修改 2.删除该生 0表示退出");
scanf("%d",&choosel);
}
else if(choosel==2)
{deletee(q,p);
printf("\n\n请继续选择后续操作:0表示退出");
scanf("%d",&choosel);
}
}
printf("\n\n请输入你还要查询的学生的姓名,输入0表\
示不按姓名查询了:");
scanf("%s",tem);
}
}
}
else if (choose==0) {printf("\n你选择了不查询!\n");break;}
else {printf("\n你以其他方式选择了不查询!\n");break;}
}
}
Student *add_new(Student *head) //添加新的学生信息
{
Student *p;
int flag;
printf("\n\n请输入你要新加入学生的学号,学号为0表示结束输入:");
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
p=(Student *)malloc(LEN);
p->num=flag;
printf("请输入新加入学生的姓名:",n);
scanf("%s",p->name);
printf("请输入新加入学生的语文成绩:",n);
scanf("%d",&p->score[0]);
printf("请输入新加入学生的数学成绩:",n);
scanf("%d",&p->score[1]);
printf("请输入新加入学生的英语成绩:",n);
scanf("%d",&p->score[2]);
printf("请输入第%d名学生的计算机成绩:",n);
scanf("%d",&p->score[3]);
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3];
p->next=head->next;
head->next=p;
n++;
printf("\n请输入还要加入学生的学号,没有此学生则输入0表示结束:");
scanf("%d",&flag);
}
head=sort_1(head,1);
printf("加入后的成绩表为:\n");
print(head);
return head;
}
void print(Student *head) //打印出当前的成绩
{
Student *p=head->next;
if (!p) {printf("\n\n此系统目前没有任何学生数据!\n\n\n");return;}
printf("此系统目前共计学生%d名:\n",n);
printf("**************************学生成绩统计一览************************\
*****\n");
printf("学号\t姓名\t语文成绩 数学成绩 英语成绩 计算机成绩 总分\n");
for(;p;p=p->next)
printf("%d\t%s\t %d %d %d %d %d\n",
p->num,p->name,
p->score[0],p->score[1],p->score[2],p->score[3],
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]);
printf("************************此软件由张骏友情提供*************************\
*\n\n");
}
void stuconserve(Student *head) //将内容保留至文件,文件名为outfile2_3
{
Student *p;
fstream outfile("outfile2_3.txt",ios::out|ios::app);
if(!outfile)
{
cout<<"文件不能打开"<<endl;
abort();
}
//fprintf(outfile2_3.txt," 学号 姓名 性别 语文 数学 外语\n");
p=head->next;
while(p)
{outfile<<setw(5)<<p->num<<setw(15)<<p->name
<<setw(5)<<p->score[0]<<setw(5)<<p->score[1]<<setw(5)<<p->score[2]<<setw(5)<<p->score[3]<<endl;
p=p->next;
}
outfile.close();
}
int main()
{
Student *head;
int choose,i;
head=(Student *)malloc(LEN);
head->next=NULL;
for(;;)
{
printf("\n\t\t* * * * * 学生成绩管理系统 * * * *\n");
printf("\t\t*\t1.学生数据键盘录入\t *\n");
printf("\t\t*\t2.学生数据统计排序\t *\n");
printf("\t\t*\t3.查询修改删除学生数据\t *\n");
printf("\t\t*\t4.插入学生数据\t\t *\n");
printf("\t\t*\t5.显示当前成绩表\t *\n");
printf("\t\t*\t0.保存退出成绩管理系统\t *\n");
printf("\t\t* * * * * 由张骏友情提供* * * * *\n\n");
printf("\n请输入你要执行的操作:");
scanf("%d",&choose);
while(getchar()!='\n');
switch(choose)
{
case 1:printf("\n\t\t\t\t****注意****");
printf("\n\n 此选项将会建立新的学生数据系统 ,原来的数据将\
不再存在,你确信要删除原来的数据并建立新的数据系统么?\n\n");
printf("1、建立新的数据系统;0、放弃建立新的数据系统。\n\n");
printf("请选择:");
scanf("%d",&i);
if (i==1) {head=cinn();print(head);break;}
else if (i==0)
{
printf("\n你选择了放弃建立新的数据系统!\n");
break;
}
else {
printf("\n你做出别的选择,当作放弃建立!\n");
break;
}
case 2:head=sort_all(head);break;
case 3:find(head);break;
case 4:head=add_new(head);
case 5:print(head);break;
case 0: stuconserve(head); system("pause");return 0;
default: printf("\n\n您的输入有误!请重新输入:\n\n");break;
}
}
}
⑺ 用C语言编写简易学生成绩查询系统
|如6 |易 |我们可以为你提供一份针对你的题目的适用于初学者的代码
5 |软 |如有进一步内需求,容请我们联系,
7 |科 |告诉我你的问题和Email,
1 |技 |有时间可以帮你,绝对救急,
5 |为 |若要获取我的QQ,请查看个人资料,或见每行开头
6 |您 |或者使用网络Hi给我留言
1 |提 |陪你顺利毕业,
5 |供 |此回复针对所有来访者和需求者有效,带着你的Email和问题来找我
⑻ c语言程序设计-学生成绩管理系统(成绩的查询,统计,用结构体,指针)
#include<stdio.h>
#include<stdlib.h>
struct stu
{
int num;
char name[20];
float grade;
};
int main()
{
int n,i,n1;
float sum=0.0,ave;
printf("请输入学生人数:\n");
scanf("%d",&n);
struct stu *p;
p=(struct stu*)calloc(n,sizeof(stu));
printf("请输入%d个学生信息(学号,姓名,成绩):\n",n);
for(i=0;i<n;i++)
{
scanf("%d %s %f",&p[i].num,&p[i].name,&p[i].grade);
}
for(i=0;i<n;i++)
{
printf("%d %s %f\n",p[i].num,p[i].name,p[i].grade);
}
printf("请输入要查询学生成绩的编号:\n");
scanf("%d",&n1);
printf("%d号学生的成绩为:%f\n",n1,p[n1-1].grade);
for(i=0;i<n;i++)
{
sum+=p[i].grade;
}
ave=sum/n;
printf("%d个学生的平均成绩为:%f\n",n,ave);
delete []p;
return 0;
}
你所指的统计功能不知道是什么,我就改成计算平均数了
⑼ c语言 学生成绩查询系统
C语言程序:
#include<stdio.h>
#defineMAX100
/*显示菜单*/
voidShowMenu()
{
printf(" ");
printf("||===================================|| ");
printf("||-----------------------------------|| ");
printf("||-------学生成绩查询系统------------|| ");
printf("||-----------------------------------|| ");
printf("||-----------------------------------|| ");
printf("||-----------------------------------|| ");
printf("||===================================|| ");
printf(" ");
printf("|----------------------------------| ");
printf("|----------请输入(0-6)-----------| ");
printf("|1.输入成绩------------| ");
printf("|2.显示成绩------------| ");
printf("|3.查询平均分----------| ");
printf("|4.查询最高分----------| ");
printf("|5.成绩排名------------| ");
printf("|6.退出----------------| ");
printf("|----------------------------------|请输入0-6:");
}
/*排序*/
voidSort(intarr[],intn)
{
inti,j,k;
inttemp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(arr[j]>arr[k])
{
k=j;
}
}
if(k!=i)
{
temp=arr[k];
arr[k]=arr[i];
arr[i]=temp;
}
}
}
voidmain(){
intchoice;
intscores[MAX]={80,78}; /*存储成绩*/
intn=2; /*人数*/
intback[MAX];
intmax; /*最高分*/
doubleavg; /*平均分*/
inti;
while(1)
{
ShowMenu();
scanf("%d",&choice);
switch(choice)
{
case1: /*输入成绩*/
{
printf("请输入新成绩:");
scanf("%d",&scores[n]);
n++;
break;
}
case2: /*显示成绩*/
{
printf("成绩列表: ");
for(i=0;i<n;i++)
{
printf("%4d",scores[i]);
}
printf(" ");
break;
}
case3: /*查询平均分*/
{
avg=0;
for(i=0;i<n;i++)
{
avg+=scores[i];
}
avg/=n;
printf("平均分:%.2lf ",avg);
break;
}
case4: /*查询最高分*/
{
max=scores[0];
for(i=1;i<n;i++)
{
if(scores[i]>max)
{
max=scores[i];
}
}
avg/=n;
printf("最高分:%d ",max);
break;
}
case5: /*成绩排名*/
{
for(i=0;i<n;i++)
{
back[i]=scores[i];
}
Sort(back,n);
printf("成绩排名: ");
printf("%8s%8s ","名次","成绩");
for(i=0;i<n;i++)
{
printf("%8d%8d ",i+1,back[i]);
}
printf(" ");
break;
}
case6: /*退出*/
{
return;
}
default: /*继续*/
{
break;
}
}
}
}
运行测试:
⑽ c语言成绩查询系统原码
呵呵,差不多的一个你可以参考一下
#include <stdio.h>
#include<dos.h>
#include<stdlib.h> /*其它说明*/
#include<string.h> /*字符串函数*/
#include<memory.h> /*内存操作函数*/
#include<ctype.h> /*字符操作函数*/
#include "conio.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 *mydelete(STUDENT *head); /*删除记录*/
STUDENT *sort(STUDENT *head); /*排序*/
STUDENT *insert(STUDENT *head,STUDENT *mynew); /*插入记录*/
void save(STUDENT *head); /*保存文件*/
STUDENT *load(); /*读文件*/
/*主函数界面*/
void main()
{STUDENT *head,mynew;
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=mydelete(head);break;
case 5:head=sort(head);break;
case 6:head=insert(head,&mynew);break; /*&mynew表示返回地址*/
case 7:save(head);break;
case 8:head=load(); break;
case 9:exit(0); /*如菜单返回值为9则程序结束*/
}
}
}
/*初始化函数*/
STUDENT *init()
{
return NULL; /*返回空指针*/
}
/*菜单选择函数*/
menu_select()
{int n;
printf("\n按任一键进入主菜单...... \npress any key to enter the menu......"); /*按任一键进入主菜单*/
getch(); /*从键盘读取一个字符,但不显示于屏幕*/
system("cls");
printf("********************************************************************************\n");
printf("\t\t 欢迎 Welcome to\n");
printf("\n\t\t\t 使用学生管理系统1.0\n\n\t\t\t\t\t\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. 删除 mydelete a record\n"); /*删除*/
printf("\t\t\t5. 排序 Sort to make mynew 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");
do{
printf("\n\t\t\t输入你的选择Enter your choice(1~9):");
scanf("%d",&n);
}while(n<1||n>9); /*如果选择项不在1~9之间则重输*/
return(n); /*返回选择项,主函数根据该数调用相应的函数*/
}
/*输入函数*/
STUDENT *create()
{int i,s;
STUDENT *head=NULL,*p; /* 定义函数.此函数带回一个指向链表头的指针*/
system("cls");
for(;;)
{p=(STUDENT *)malloc(LEN); /*开辟一个新的单元*/
if(!p) /*如果指针p为空*/
{printf("\n输出内存溢出. Out 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("请输入3门成绩Please enter the %d scores\n",3); /*提示开始输入成绩*/
s=0; /*计算每个学生的总分,初值为0*/
for(i=0;i<3;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; /*移动指针*/
system("cls");
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("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %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]; /*存放姓名用的字符数组*/
system("cls");
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 | %3d | %3d | %3d | %3d | %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("\n没有该学生 There is no num %s student on the list.\n",s); /*显示没有该学生*/
}
/*删除记录函数*/
STUDENT *mydelete(STUDENT *head)
{int n;
STUDENT *p1,*p2; /*p1为查找到要删除的结点指针,p2为其前驱指针*/
char c,s[6]; /*s[6]用来存放学号,c用来输入字母*/
system("cls");
printf("请输入要删除的学号 Please enter the mydeleted 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 | %3d | %3d | %3d | %3d | %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("\n是否要删除,输入Y删除,N则退出\nAre you sure to mydelete 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("\n学号为(Num): %s 学生以被删除(student have been mydeleted.)\n",s);
printf("别忘了保存. Don't forget to save.\n");break; /*删除后就跳出循环*/
}
}
}
else
printf("\n没有这个学生在表上\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->average<p1->average&&p1!=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 *mynew)
{STUDENT *p0,*p1,*p2;
int n,sum1,i;
p1=head; /*使p1指向第一个结点*/
p0=mynew; /*p0指向要插入的结点*/
printf("\nPlease enter a mynew record.\n"); /*提示输入记录信息*/
printf("输入学号Enter the num:");
scanf("%s",mynew->num);
printf("输入名字Enter the name:");
scanf("%s",mynew->name);
printf("Please enter the %d scores.\n",3);
sum1=0; /*保存新记录的总分,初值为0*/
for(i=0;i<3;i++)
{
do{
printf("成绩score%d:",i+1);
scanf("%d",&mynew->score[i]);
if(mynew->score[i]>100||mynew->score[i]<0)
printf("数据错误Data error,please enter again.\n");
}while(mynew->score[i]>100||mynew->score[i]<0);
sum1=sum1+mynew->score[i]; /*累加各门成绩*/
}
mynew->sum=sum1; /*将总分存入新记录中*/
mynew->average=(float)sum1/3;
mynew->order=0;
if(head==NULL) /*原来的链表是空表*/
{head=p0;p0->next=NULL;} /*使p0指向的结点作为头结点*/
else
{while((p0->average<p1->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("\n学生Student %s 已被更新have been inserted.\n",mynew->name);
printf("不要忘了保存Don't forget to save the mynew file.\n");
return(head);
}
/*保存数据到文件函数*/
void save(STUDENT *head)
{FILE *fp; /*定义指向文件的指针*/
STUDENT *p; /* 定义移动指针*/
char outfile[10];
printf("输出文件例如:c:\\score Enter outfile name,for example c:\\score\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"w"))==NULL) /*为输出打开一个二进制文件,为只写方式*/
{
printf("打不开文件Cannot open the file\n");
return; /*若打不开则返回菜单*/
}
printf("\n保存中...Saving 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("倒入文件例如:c:\\score Enter infile name,for example c:\\score\n");
scanf("%s",infile);
if((fp=fopen(infile,"r"))==NULL) /*打开一个二进制文件,为只读方式*/
{
printf("打不开文件Can not open the file.\n");
return(head);
}
printf("\n寻找文件...Loading 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("\n你成功的从文件中读取了数据!\nYou have success to read data from the file!\n");
return (head);
}