当前位置:首页 » 考试成绩 » c实现学生成绩管理系统

c实现学生成绩管理系统

发布时间: 2021-01-30 02:18:18

『壹』 C语言编写一个学生成绩管理系统

这么大的问题,至少要一百块工钱

『贰』 用C语言编程实现一个简单的学生成绩管理系统

#include<stdio.h>#include<string.h>typedefstructstudent{charname[20]; /*姓名*/intcode; /*学号*/intkor,eng,math; /*3门课程的成绩*/}STUDENT;/*返回输入数据*/STUDENTInput();/*输出所有输入的数据*/voidOutput(STUDENTinfo[],intcnt);/*将输入分数转换为A-F*/chargrade(intscore);intmain(){STUDENTS[10];intcnt=0,select;inti,j;intcode;while(1){printf(" 学生信息管理系统 ");printf(" 1 添加 ");printf(" 2 删除 ");printf(" 3 查询 ");printf(" 0 结束 ");printf(" 您的选择[0-3]:");scanf("%d",&select);if(select<0||select>3)continue;if(select==0){printf("退出系统! ");break;}if(select==1) /*添加*/{S[cnt++]=Input();}elseif(select==2) /*删除*/{printf(" 待删除学生的学号:");scanf("%d",&code);for(i=0;i<cnt;i++)if(S[i].code==code)break;if(i>=cnt){printf("学号不存在,删除失败! ");}else{for(j=i+1;j<cnt;j++){strcpy(S[j-1].name,S[j].name);S[j-1].code=S[j].code;S[j-1].kor=S[j].kor;S[j-1].eng=S[j].eng;S[j-1].math=S[j].math;}cnt--;printf("删除成功! ");}}else /*查询*/{printf(" 待查找学生的学号:");scanf("%d",&code);for(i=0;i<cnt;i++)if(S[i].code==code)break;if(i>=cnt){printf("学号不存在,查找失败! ");}else{printf(" 查询结果: ");Output(S,i);}}}return0;}/*返回输入数据*/STUDENTInput(){STUDENTstu;printf(" 新学生信息 ");printf(" 学号:");scanf("%d",&stu.code);printf(" 姓名:");getchar();gets(stu.name);printf(" 3门课程成绩(以空格分隔):");scanf("%d%d%d",&stu.kor,&stu.eng,&stu.math);returnstu;}/*输出所有输入的数据*/voidOutput(STUDENTinfo[],intcnt){printf("学号:%d ",info[cnt].code);printf("姓名:");puts(info[cnt].name);printf("成绩:%c%c%c ",grade(info[cnt].kor),grade(info[cnt].eng),grade(info[cnt].math));}/*将输入分数转换为A-F*/chargrade(intscore){if(score<0||score>100)return'F';if(score>=90)return'A';if(score>=80)return'B';if(score>=70)return'C';if(score>=60)return'D';elsereturn'E';}

运行测试:

『叁』 c语言实现设计一个学生成绩管理系统课程

参考代码如下,不过还是建议自己写一写比较好:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student //结构体
{
char name[20]; //姓名
char number[20]; //学号
double math; //数学
double english; //英语
double chinese; //语文
double program; //程序
}s[50];

void head() //界面
{
printf(
"**********************************************************************\n"
"** **\n"
"** **\n"
"** 学生成绩管理系统 **\n"
"** **\n"
"** 1.信息录入 **\n"
"** 2.信息统计 **\n"
"** 3.信息浏览 **\n"
"** 4.信息查询 **\n"
"** 5.信息排序 **\n"
"** 6.信息删除 **\n"
"** 0.退出系统 **\n"
"** **\n"
"**********************************************************************\n"
);
}
void ru(struct student s[], int* n) //文件导入函数
{
FILE *p;
int i=*n;
if((p=fopen("数据.txt", "r"))==NULL)
{
n=n;
}
else
{
while(!feof(p))
{
fscanf(p, "%s%s%lf%lf%lf%lf\n", s[i].name, s[i].number, &s[i].math, &s[i].english, &s[i].chinese, &s[i].program);
i++;
*n=*n+1;
}
}
fclose(p);
}
void chu(struct student s[], int n)
{
FILE *p;
int i=0;
if((p=fopen("数据.txt", "w"))==NULL)
{
printf("无法打开此文件!");
}
else
{
while(i<n-1)
{
fprintf(p, "%s %s %lf %lf %lf %lf\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
i++;
}
fprintf(p, "%s %s %lf %lf %lf %lf", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
fclose(p);
}
void dayin(struct student s[], int n) //显示所有信息
{
int i;
double all=0.0;
printf("\n姓名\t\t学号\t\t数学\t英语\t语文\t程序\t总分\n");
for (i=0; i<n; i++)
{
all=s[i].math+s[i].english+s[i].chinese+s[i].program;
printf("%s\t\t%s\t\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program, all);
}
}
void shuru(struct student s[], int* n) //信息输入函数
{
int i=*n, j, k, m;
printf("请输入学生姓名:");
scanf("%s", s[i].name);
printf("请输入学生学号:");
for (j=0; ; j++)
{
m=0;
scanf("%s", s[i].number);
for (k=0; k<i; k++)
{
if (strcmp(s[i].number, s[k].number)==0)
{
m=m+1;
printf("学号重复,请重新输入学号:");
break;
}
}
if (m==0)
{
break;
}
}
printf("请输入数学成绩:");
scanf("%lf", &s[i].math);
printf("请输入英语成绩:");
scanf("%lf", &s[i].english);
printf("请输入语文成绩:");
scanf("%lf", &s[i].chinese);
printf("请输入程序成绩:") ;
scanf("%lf", &s[i].program);
printf("添加信息成功!\n");
*n=*n+1;
chu(s, *n);
}
void paixu(struct student s[], int n) //排序函数
{
int i, j;
double all1, all2;
struct student stu;
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)
{
all1=s[i].math+s[i].english+s[i].chinese+s[i].program;
all2=s[j].math+s[j].english+s[j].chinese+s[j].program;
if (all1<all2)
{
stu=s[i];
s[i]=s[j];
s[j]=stu;
}
}
}
printf("排序后的数据:\n");
dayin(s, n);
}
void chazhao(struct student s[], int n) //查找函数
{
char name[20], num[20];
int m1, m2=0, i, j;
printf("1.按姓名查找\n2.按学号查找\n选择查询方式(1或2):");
scanf("%d", &m1);
if (m1==1)
{
printf("请输入您要查找的学生姓名:");
scanf("%s", name);
for (i=0; i<n; i++)
{
if (strcmp(s[i].name, name)==0)
{
m2=m2+1;
if (m2==1)
{
printf("\n姓名\t\t学号\t数学\t英语\t语文\t程序\n");
}
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
}
if (m2==0)
{
printf("没有此学生信息!\n");
}
}
else if (m1==2)
{
printf("请输入您要查找的学生学号:");
scanf("%s", num);
j=0;
for (i=0; i<n; i++)
{
if (strcmp(s[i].number, num)==0)
{
m2=m2+1;
if (m2==1)
{
printf("\n姓名\t\t学号\t数学\t英语\t语文\t程序\n");
}
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
}
if (m2==0)
{
printf("没有此学生信息!\n");
}
}
}
void shanchu(struct student s[], int* n) //删除函数
{
char num[20];
int m=0, i, j;
printf("请输入您要删除的学生学号:");
scanf("%s", num);
for (i=0; i<=*n; i++)
{
if (strcmp(s[i].number, num)==0)
{
m=m+1;
for (j=i; j<*n; j++)
{
s[j]=s[j+1];
}
*n=*n-1;
}
}
if (m==0)
{
printf("没有此学生信息!\n");
}
else
{
chu(s, *n);
printf("删除完毕!\n");
}
}
void allAndAver(struct student s[], int n)
{
int i ;
double all=0.0, aver=0.0;
for (i=0; i<n; i++)
{
all=s[i].math+s[i].english+s[i].chinese+s[i].program;
aver=all/4;
printf("%s\t\t%s\t\t%.1lf\t%.1lf\n", s[i].name, s[i].number, all, aver);
}
}
void Fail(struct student s[], int n) //统计单科不及格人数
{
int i, fail[4]={0};
for (i=0; i<n; i++)
{
if (s[i].math<60)
{
fail[0]++;
}
if (s[i].english<60)
{
fail[1]++;
}
if (s[i].chinese<60)
{
fail[2]++;
}
if (s[i].program<60)
{
fail[3]++;
}
}
printf("\n不及格信息:\n");
printf("数学不及格的人数为:%d人\n", fail[0]);
printf("英语不及格的人数为:%d人\n", fail[1]);
printf("语文不及格的人数为:%d人\n", fail[2]);
printf("程序不及格的人数为:%d人\n", fail[3]);
}
void Max(struct student s[], int n) //统计单科最高分人数
{
int i, counter[4]={0};
double max[4]={s[0].math, s[0].english, s[0].chinese, s[0].program};
for (i=0; i<n; i++)
{
if (s[i].math>max[0])
{
max[0]=s[i].math;
}
if (s[i].math>max[1])
{
max[1]=s[i].math;
}
if (s[i].math>max[2])
{
max[2]=s[i].math;
}
if (s[i].math>max[3])
{
max[3]=s[i].math;
}
}
for (i=0; i<n; i++)
{
if (s[i].math==max[0])
{
counter[0]++;
}
if (s[i].math==max[1])
{
counter[1]++;
}
if (s[i].math==max[2])
{
counter[2]++;
}
if (s[i].math==max[3])
{
counter[3]++;
}
}
printf("\n最高分信息:\n");
printf("数学最高分为:%.1lf, 人数为:%d人\n", max[0], counter[0]);
printf("英语最高分为:%.1lf, 人数为:%d人\n", max[1], counter[1]);
printf("语文最高分为:%.1lf, 人数为:%d人\n", max[2], counter[2]);
printf("程序最高分为:%.1lf, 人数为:%d人\n", max[3], counter[3]);
}
void Min(struct student s[], int n) //统计单科最低分人数
{
int i, counter[4]={0};
double min[4]={s[0].math, s[0].english, s[0].chinese, s[0].program};
for (i=0; i<n; i++)
{
if (s[i].math<min[0])
{
min[0]=s[i].math;
}
if (s[i].math<min[1])
{
min[1]=s[i].math;
}
if (s[i].math<min[2])
{
min[2]=s[i].math;
}
if (s[i].math<min[3])
{
min[3]=s[i].math;
}
}
for (i=0; i<n; i++)
{
if (s[i].math==min[0])
{
counter[0]++;
}
if (s[i].math==min[1])
{
counter[1]++;
}
if (s[i].math==min[2])
{
counter[2]++;
}
if (s[i].math==min[3])
{
counter[3]++;
}
}
printf("\n最低分信息:\n");
printf("数学最低分为:%.1lf, 人数为:%d人\n", min[0], counter[0]);
printf("英语最低分为:%.1lf, 人数为:%d人\n", min[1], counter[1]);
printf("语文最低分为:%.1lf, 人数为:%d人\n", min[2], counter[2]);
printf("程序最低分为:%.1lf, 人数为:%d人\n", min[3], counter[3]);
}
void tongji(struct student s[], int n) //统计函数
{
printf("统计信息如下:\n");
printf("\n姓名\t\t学号\t\t总分\t平均分\n");
allAndAver(s, n);
Max(s, n);
Min(s, n) ;
Fail(s, n);
}
int main() //主函数
{
int k, n=0;
ru(s, &n);
chu(s, n);
while (1)
{
head();
printf("\n请按对应的键选择相应的功能:");
scanf("%d",&k);
switch (k)
{
case 1:
shuru(s, &n);
break;
case 2:
tongji(s, n);
break;
case 3:
dayin(s, n);
break;
case 4:
chazhao(s, n);
break;
case 5:
paixu(s, n);
break;
case 6:
shanchu(s, &n);
break;
case 0:
exit(1);
break;
default : printf("请输入正确的命令!\n");
}
system("pause");
system("cls");
}
return 0;
}

『肆』 用C语言实现学生成绩管理系统的程序

我参考书里的一个程序:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<string.h>
#define LEN sizeof(struct student)
#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf\n"
#define DATA stu[i].num,stu[i].name,stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum
struct student/*定义学生成绩结构体*/
{ int num;/*学号*/
char name[15];/*姓名*/
double elec;/*选修课*/
double expe;/*实验课*/
double requ;/*必修课*/
double sum;/*总分*/
};
struct student stu[50];/*定义结构体数组*/
void in();/*录入学生成绩信息*/
void show();/*显示学生信息*/
void order();/*按总分排序*/
void del();/*删除学生成绩信息*/
void modify();/*修改学生成绩信息*/
void menu();/*主菜单*/
void insert();/*插入学生信息*/
void total();/*计算总人数*/
void search();/*查找学生信息*/
void main()/*主函数*/
{ int n;
menu();
scanf("%d",&n);/*输入选择功能的编号*/
while(n)
{ switch(n)
{ case 1: in();break;
case 2: search();break;
case 3: del();break;
case 4: modify();break;
case 5: insert();break;
case 6: order();break;
case 7: total();break;
default:break;
}
getch();
menu();/*执行完功能再次显示菜单界面*/
scanf("%d",&n);
}
}

void in()/*录入学生信息*/
{ int i,m=0;/*m是记录的条数*/
char ch[2];
FILE *fp;/*定义文件指针*/
if((fp=fopen("data.txt","a+"))==NULL)/*打开指定文件*/
{ printf("can not open\n");return;}
while(!feof(fp)) {
if(fread(&stu[m] ,LEN,1,fp)==1)
m++;/*统计当前记录条数*/
}
fclose(fp);
if(m==0)
printf("No record!\n");
else
{
system("cls");
show();/*调用show函数,显示原有信息*/
}
if((fp=fopen("data.txt","wb"))==NULL)
{ printf("can not open\n");return;}
for(i=0;i<m;i++) fwrite(&stu[i] ,LEN,1,fp);/*向指定的磁盘文件写入信息*/
printf("please input(y/n):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/
{
printf("number:");scanf("%d",&stu[m].num);/*输入学生学号*/
for(i=0;i<m;i++)
if(stu[i].num==stu[m].num)
{
printf("the number is existing,press any to continue!");
getch();
fclose(fp);
return;
}
printf("name:");scanf("%s",stu[m].name);/*输入学生姓名*/
printf("elective:");scanf("%lf",&stu[m].elec);/*输入选修课成绩*/
printf("experiment:");scanf("%lf",&stu[m].expe);/*输入实验课成绩*/
printf("required course:");scanf("%lf",&stu[m].requ);/*输入必修课成绩*/
stu[m].sum=stu[m].elec+stu[m].expe+stu[m].requ;/*计算出总成绩*/
if(fwrite(&stu[m],LEN,1,fp)!=1)/*将新录入的信息写入指定的磁盘文件*/
{ printf("can not save!"); getch(); }
else { printf("%s saved!\n",stu[m].name);m++;}
printf("continue?(y/n):");/*询问是否继续*/
scanf("%s",ch);
}
fclose(fp);
printf("OK!\n");
}

void show()
{ FILE *fp;
int i,m=0;
fp=fopen("data.txt","rb");
while(!feof(fp))
{
if(fread(&stu[m] ,LEN,1,fp)==1)
m++;
}
fclose(fp);
printf("number name elective experiment required sum\t\n");
for(i=0;i<m;i++)
{
printf(FORMAT,DATA);/*将信息按指定格式打印*/
}
}

void menu()/*自定义函数实现菜单功能*/
{
system("cls");
printf("\n\n\n\n\n");
printf("\t\t|---------------------STUDENT-------------------|\n");
printf("\t\t|\t 0. exit |\n");
printf("\t\t|\t 1. input record |\n");
printf("\t\t|\t 2. search record |\n");
printf("\t\t|\t 3. delete record |\n");
printf("\t\t|\t 4. modify record |\n");
printf("\t\t|\t 5. insert record |\n");
printf("\t\t|\t 6. order |\n");
printf("\t\t|\t 7. number |\n");
printf("\t\t|-----------------------------------------------|\n\n");
printf("\t\t\tchoose(0-7):");
}

void order()/*自定义排序函数*/
{ FILE *fp;
struct student t;
int i=0,j=0,m=0;
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("can not open!\n");
return;
}
while(!feof(fp))
if(fread(&stu[m] ,LEN,1,fp)==1)
m++;
fclose(fp);
if(m==0)
{
printf("no record!\n");
return;
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("can not open\n");
return;}
for(i=0;i<m-1;i++)
for(j=i+1;j<m;j++)/*双重循环实现成绩比较并交换*/
if(stu[i].sum<stu[j].sum)
{ t=stu[i];stu[i]=stu[j];stu[j]=t;}
if((fp=fopen("data.txt","wb"))==NULL)
{ printf("can not open\n");return;}
for(i=0;i<m;i++)/*将重新排好序的内容重新写入指定的磁盘文件中*/
if(fwrite(&stu[i] ,LEN,1,fp)!=1)
{
printf("%s can not save!\n");
getch();
}
fclose(fp);
printf("save successfully\n");
}
void del()/*自定义删除函数*/
{FILE *fp;
int snum,i,j,m=0;
char ch[2];
if((fp=fopen("data.txt","r+"))==NULL)
{ printf("can not open\n");return;}
while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++;
fclose(fp);
if(m==0)
{
printf("no record!\n");
return;
}
printf("please input the number:");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==stu[i].num)
break;
printf("find the student,delete?(y/n)");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/
for(j=i;j<m;j++)
stu[j]=stu[j+1];/*将后一个记录移到前一个记录的位置*/
m--;/*记录的总个数减1*/
if((fp=fopen("data.txt","wb"))==NULL)
{ printf("can not open\n");return;}
for(j=0;j<m;j++)/*将更改后的记录重新写入指定的磁盘文件中*/
if(fwrite(&stu[j] ,LEN,1,fp)!=1)
{ printf("can not save!\n");
getch();}
fclose(fp);
printf("delete successfully!\n");
}

void search()/*自定义查找函数*/
{ FILE *fp;
int snum,i,m=0;
char ch[2];
if((fp=fopen("data.txt","rb"))==NULL)
{ printf("can not open\n");return;}
while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++;
fclose(fp);
if(m==0) {printf("no record!\n");return;}
printf("please input the number:");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==stu[i].num)/*查找输入的学号是否在记录中*/
{ printf("find the student,show?(y/n)");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
{
printf("number name elective experiment required sum\t\n");
printf(FORMAT,DATA);/*将查找出的结果按指定格式输出*/
break;
}
}
if(i==m) printf("can not find the student!\n");/*未找到要查找的信息*/
}

void modify()/*自定义修改函数*/
{ FILE *fp;
int i,j,m=0,snum;
if((fp=fopen("data.txt","r+"))==NULL)
{ printf("can not open\n");return;}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1) m++;
if(m==0) {printf("no record!\n");
fclose(fp);
return;
}
printf("please input the number of the student which do you want to modify!\n");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==stu[i].num)/*检索记录中是否有要修改的信息*/
break;
printf("find the student!you can modify!\n");
printf("name:\n");
scanf("%s",stu[i].name);/*输入名字*/
printf("\nelective:");
scanf("%lf",&stu[i].elec);/*输入选修课成绩*/
printf("\nexperiment:");
scanf("%lf",&stu[i].expe);/*输入实验课成绩*/
printf("\nrequired course:");
scanf("%lf",&stu[i].requ);/*输入必修课成绩*/
stu[i].sum=stu[i].elec+stu[i].expe+stu[i].requ;
if((fp=fopen("data.txt","wb"))==NULL)
{ printf("can not open\n");return;}
for(j=0;j<m;j++)/*将新修改的信息写入指定的磁盘文件中*/
if(fwrite(&stu[j] ,LEN,1,fp)!=1)
{ printf("can not save!"); getch(); }
fclose(fp);
}

void insert()/*自定义插入函数*/
{ FILE *fp;
int i,j,k,m=0,snum;
if((fp=fopen("data.txt","r+"))==NULL)
{ printf("can not open\n");return;}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1) m++;
if(m==0) {printf("no record!\n");
fclose(fp);
return;
}
printf("please input position where do you want to insert!(input the number)\n");
scanf("%d",&snum);/*输入要插入的位置*/
for(i=0;i<m;i++)
if(snum==stu[i].num)
break;
for(j=m-1;j>i;j--)
stu[j+1]=stu[j];/*从最后一条记录开始均向后移一位*/
printf("now please input the new information.\n");
printf("number:");
scanf("%d",&stu[i+1].num);
for(k=0;k<m;k++)
if(stu[k].num==stu[i+1].num)
{
printf("the number is existing,press any to continue!");
getch();
fclose(fp);
return;
}
printf("name:\n");
scanf("%s",stu[i+1].name);
printf("\nelective:");
scanf("%lf",&stu[i+1].elec);
printf("\nexperiment:");
scanf("%lf",&stu[i+1].expe);
printf("\nrequired course:");
scanf("%lf",&stu[i+1].requ);
stu[i+1].sum=stu[i+1].elec+stu[i+1].expe+stu[i+1].requ;
if((fp=fopen("data.txt","wb"))==NULL)
{ printf("can not open\n");return;}
for(k=0;k<=m;k++)
if(fwrite(&stu[k] ,LEN,1,fp)!=1)/*将修改后的记录写入磁盘文件中*/
{ printf("can not save!"); getch(); }
fclose(fp);
}

void total()
{ FILE *fp;
int m=0;
if((fp=fopen("data.txt","r+"))==NULL)
{ printf("can not open\n");return;}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;/*统计记录个数即学生个数*/
if(m==0) {printf("no record!\n");fclose(fp);return;}
printf("the class are %d students!\n",m);/*将统计的个数输出*/
fclose(fp);
}

『伍』 c语言编程 实现简单的学生成绩管理系统

出密码模块外其他的都可以!我也想添个密码的!
后来觉得没用,先做好功能模块再说!
密码模块设计不好的话,很容易被破解的!
#ifndef H_STUDENT_HH /*xxx如果没有定义xxx*/
#define H_STUDENT_HH /*xxx定义xx*/

#include "stdio.h"
#include "string.h"
#include "malloc.h"

#define LEN sizeof(struct message_student) /*一个结构体数组元素的长度*/
#define numsubs 5 /*学科数目*/
typedef struct message_student /*结构体定义*/
{
char number[6];
char name[20];
char sex[4];
float subject[numsubs];
float score;
float average;
int index;
}student;

extern int numstus; /*学生数目*/
extern student *pointer; /*指向结构体数组*/
extern int lens;

int menu_select(); /*函数声明*/
int openfile(student stu[]);
int findrecord(student stud[]);
int writetotext(student stud[]);
void welcome();
void display1();
void showtable();
void sort(student stu[]);
void deleterecord(student stu[],int i);
void addrecord(student stud[]);
void display(student stud[],int n1,int n2);
void amendrecord(student stud[]);
void count(student stud[]);
void sortnum(student stud[]);
void sortnum2(student stud[]);
void sortname(student stud[]);
void sortname2(student stud[]);
void sortcount(student stud[]);
void sortcount2(student stud[]);
void statistic(student stud[]);
void display1();

#endif

#include "stdio.h"
int menu_select()
{
char c;
printf("\n\n");
printf(" | 1. 增加学生记录 5.统计信息 |\n");
printf(" | 2. 查询学生记录 6.打开文件 |\n");
printf(" | 3. 修改学生记录 7.保存文件 |\n");
printf(" | 4. 学生纪录排序 8.显示记录 |\n");
printf(" | 0.退出系统 |\n");
printf("\n\n");
printf("请选择(0-8):");
c=getchar();
getchar();
return (c-'0');
}

#include "stdio.h"
int findrecord(student stud[]) /*查找信息*/
{
char str[2];
int i,num;
if(numstus==0)
{
printf("没有可被查找的记录\n");
return -1;
}
else
{
printf("以何种方式查找?\n1.学号\t2.姓名\t3.名次\n");
gets(str);
if(str[0]=='1') /*按学号查找*/
{
printf("请输入学号:");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].number)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='2') /*按姓名查找*/
{
printf("请输入姓名:");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].name)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='3') /*按名次查找*/
{
printf("请输入名次:");
scanf("%d",&num);
getchar();
for(i=0;i<=numstus;i++)
if(num==stud[i].index)
{
display(stud,i,i);
break;
}
else continue;
}
if(i>numstus)
{
printf("没有查找所要的信息。\n");
return -1;
}
return i;
}
}

#include"stdio.h"
int openfile(student stu[])
{
int i=0,j;
FILE *fp;
char filename[20],str[2];
if(numstus!=0)
{
printf("已经有记录存在,是否保存?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(stu);
}
printf("请输入文件名:");
gets(filename);
numstus=0;
if((fp=fopen(filename,"rb+"))==NULL)
{
printf("无法打开该文件\n");
return(-1);
}
fscanf(fp,"%d",&numstus);
fgetc(fp);
while(i<numstus)
{
fscanf(fp,"%s",stu[i].number);
fscanf(fp,"%s",stu[i].name);
fscanf(fp,"%s",stu[i].sex);
for(j=0;j<numsubs;j++)
fscanf(fp,"%f",&stu[i].subject[j]);
fscanf(fp,"%f",&stu[i].score);
fscanf(fp,"%f",&stu[i].average);
fscanf(fp,"%d",&stu[i].index);
i++;
}
fclose(fp);
printf("文件读取成功\n");
printf("是否显示纪录?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
display(stu,0,numstus-1);
return(0);
}
#include "stdio.h"
void sort(student stud[])
{
int i,j=0;
char str[5];
student *p;
p=stud;
if(numstus==0)
{
printf("没有可供查询的记录!");
}
while(1)
{
for(i=0;;i++)
{
printf(" 请输入查询方式:");
printf("(直接输入回车则结束查询操作)\n");
printf("1.按照学号\t");
printf("2.按照姓名\t");
printf("3.按照名次\n");
gets(str);
if(strlen(str)==0) break;
if(str[0]=='1')
{
printf("请输入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortnum2(p);
else
sortnum(p);
display(stud,0,numstus-1);
}
else if(str[0]=='2')
{
printf("请输入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortname2(p);
else
sortname(p);
display(stud,0,numstus-1);
}
else if(str[0]=='3')
{
printf("请输入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortcount2(p);
else
sortcount(p);
display(stud,0,numstus-1);
}
else printf("请输入1~3");
printf("是否退出排序?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') break;
}
return;
}
}
void sortnum(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j+1].number,stud[j].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortnum2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j].number,stud[j+1].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j+1].name,stud[j].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j].name,stud[j+1].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(stud[j+1].index>stud[j].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(stud[j].index>stud[j+1].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
#include"stdio.h"
void statistic(student stud[]) /*新增功能,输出统计信息*/
{
int i,j=0,k=0;
char c1,str[2];
float average[numsubs],sum=0;
if(numstus==0)
printf("没有可被查找的记录\n");
else
{
while(1)
{
printf("下面将统计考试成绩\n");
printf("请选择你要统计哪科的成绩 1.A\t2.B\t3.C\t4.D\t5.E\n");
c1=getchar();
printf("\t一共有个%d记录\n",numstus); /*总共记录数*/
switch(c1)
{
case '1':
for(i=0;i<numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[0];
if(stud[k].subject[0]>stud[i].subject[0]) k=i;
if(stud[j].subject[0]<stud[i].subject[0]) j=i;
}
average[0]=sum/numstus;
printf("\t科目A的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);
printf("\t科目A的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);
printf("\t科目A的平均分是 %5.2f\n",average[0]); /*平均分*/
break;
case '2':
for(i=0;i<numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[1];
if(stud[k].subject[1]>stud[i].subject[1]) k=i;
if(stud[j].subject[1]<stud[i].subject[1]) j=i;
}
average[1]=sum/numstus;
printf("\t科目B的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);
printf("\t科目B的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);
printf("\t科目B的平均分是 %5.2f\n",average[1]); /*平均分*/
break;
case '3':
for(i=0;i<numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[2];
if(stud[k].subject[2]>stud[i].subject[2]) k=i;
if(stud[j].subject[2]<stud[i].subject[2]) j=i;
}
average[2]=sum/numstus;
printf("\t科目C的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);
printf("\t科目C的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);
printf("\t科目C的平均分是 %5.2f\n",average[2]); /*平均分*/
break;
case '4':
for(i=0;i<numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[3];
if(stud[k].subject[3]>stud[i].subject[3]) k=i;
if(stud[j].subject[3]<stud[i].subject[3]) j=i;
}
average[3]=sum/numstus;
printf("\t科目D的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);
printf("\t科目D的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);
printf("\t科目D的平均分是 %5.2f\n",average[3]); /*平均分*/
break;
case '5':
for(i=0;i<numstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[4];
if(stud[k].subject[4]>stud[i].subject[4]) k=i;
if(stud[j].subject[4]<stud[i].subject[4]) j=i;
}
average[4]=sum/numstus;
printf("\t科目E的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4]);
printf("\t科目E的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4]);
printf("\t科目E的平均分是 %5.2f\n",average[4]); /*平均分*/
break;
default:printf("输入错误!请输入1~5之间的数\n");
}
sum=0;
getchar();
printf("是否继续进行统计?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') ;
else break;
}
}
}

#include"stdio.h"
int writetotext(student stud[]) /*将所有记录写入文件*/
{
int i=0,j;
FILE *fp;
char filename[20];
printf("输入文件名称:");
gets(filename);
fp=fopen(filename,"w");
fprintf(fp,"%d\n",numstus);
while(i<numstus)
{
fprintf(fp,"%s %s %s ",stud[i].number,stud[i].name,stud[i].sex);
for(j=0;j<numsubs;j++)
fprintf(fp,"%f ",stud[i].subject[j]);
fprintf(fp,"%f %f %d ",stud[i].score,stud[i].average,stud[i].index);
i++;
}
fclose(fp);
printf("已成功存储!\n");
display(stud,0,numstus-1);
numstus=0;
return 0;
}

#include"stdio.h"
void welcome()
{
printf("\t*************************************************************\n");
printf("\t\t\t\t欢迎进入学生成绩管理系统\t\t\t\t\t\t\t\t 晓 欢迎使用!\n");
printf("\t*************************************************************\n");
printf("\t\t\t\t\t\t本系统由“晓”一组亲情制作\n\n");
printf("\t\t\t\t\t\t制作人员列表: \n");
printf("\t\t\t\t\t\t吴彦兵 黄进 汪红波\n\t\t\t\t\t\t刘玉萧 杨超 章耀\n");
printf("输入回车进入菜单栏:\n");
printf("\n\n");
getchar();
}

void showtable()
{
printf("-------------------------------------------------------------------------------\n");
printf("学号\t姓名\t性别\tA\tB\tC\tD\tE 总分 平均分 名次\n");
printf("-------------------------------------------------------------------------------\n");
}

void display(student stud[],int n1,int n2)
{
int i;
showtable(); /*显示表头*/
for(i=n1;i<=n2;i++)
printf("%s\t%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f %.1f %.1f %d\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index);
/*通过循环输出数据*/

}
void display1()
{
printf("\t\t本系统由晓一组亲情制作\n\n");
printf("\t\t制作人员列表: \n");
printf("\t\t\t\t\t\t吴彦兵 黄进 汪红波\n\t\t\t\t\t\t刘玉萧 杨超 章耀\n");
printf("\t\t\t=========欢迎下次使用=========");
printf("\n\n");
getchar();
}

#include"stdio.h"
#include<string.h>
void amendrecord(student stud[])
{
char str[5]; /*供用户输入*/
int i=-1,j;

if(numstus==0) /*没有记录返回*/
printf("没有可供修改的记录!");
while(i<0)
{
i=findrecord(stud);
if(i>=0)
{
printf("要删除这个学生的信息吗?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{
deleterecord(stud,i);
count(stud);
}
else
{
printf("确定要修改这个学生的信息吗?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{

printf("下面请重新输入学生的信息:\n");
printf("请输入学号:");
gets(stud[i].number);
printf("请输入姓名:");
gets(stud[i].name);
printf("请输入性别(男/女 1/0):");
gets(str);
if(str[0]=='0')
strcpy(stud[i].sex,"女");
else
strcpy(stud[i].sex,"男");
stud[i].score=0;
printf("请按顺序输入成绩:");
for(j=0;j<numsubs;j++)
{
scanf("%f",&stud[i].subject[j]);
stud[i].score+=stud[i].subject[j];
}
getchar();
stud[i].average=stud[i].score/numsubs;
}
count(stud);
}
display(stud,0,numstus-1);
}
printf("是否继续进行其他修改?(y/n)\n");
gets(str);
if(str[0]=='y'||str[0]=='Y')
i=-1;
else i=1;
}
}

void deleterecord(student stu[],int i) /*删除信息*/
{
int j;

while(i>=0)
{
for(j=i;j<numstus;j++)
stu[j]=stu[j+1];
numstus--;
printf("删除成功!\n");

}
}

void count(student stud[])
{
int i,j;
for(i=0;i<numstus;i++)
{
stud[i].index=1;
for(j=0;j<numstus;j++)
if(stud[j].score>stud[i].score)
stud[i].index++;
}
}

#include "stdio.h"
void addrecord(student stud[])
{
int i=0,j,num;
char str[5];
if(numstus!=0)
{
printf("已有记录存在是否覆盖?(y/n)\n");
gets(str);
if(str[0]=='Y'||str[0]=='y')
i=0;
else i=numstus;
}

printf("请输入增加的学生信息条目数:");
scanf("%d",&num);
if(i==0)
numstus=num;
else numstus+=num;
if(numstus>lens)
{
lens+=50;
pointer=(student *)realloc(pointer,lens*LEN);
}
printf("请输入学生信息:\n");
for(;i<numstus;i++)
{
getchar();
printf("请输入学号:");
gets(pointer[i].number);
printf("请输入姓名:");
gets(pointer[i].name);
printf("请输入性别(男/女 1/0):");
gets(pointer[i].sex);
if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女");
else strcpy(pointer[i].sex,"男");
printf("请输入各科成绩:(按ABCDE的顺序):");
stud[i].score=0;
for(j=0;j<numsubs;j++)
{
scanf("%f",&stud[i].subject[j]); /*计算总分*/
stud[i].score+=stud[i].subject[j];
}
stud[i].average=stud[i].score/numsubs; /*计算平均分*/
}
count(stud); /*附名次*/
display(stud,0,numstus-1);
getchar();
}
#include "stdio.h"
int numstus;
int lens;
student *pointer;
void main()
{
int i=1;
char str[2];
lens=100;
pointer=(student *)malloc(lens*LEN); /*分配内存*/
numstus=0;
welcome(); /*欢迎界面*/
while(i>0)
{
i=menu_select(); /*控制菜单*/
switch(i)
{
case 1:addrecord(pointer);break; /*增加学生信息*/
case 2:findrecord(pointer);break; /*查询学生信息*/
case 3:amendrecord(pointer);break; /*修改学生信息*/
case 4:sort(pointer);break; /*学生信息排序*/
case 5:statistic(pointer);break; /*统计信息*/
case 6:openfile(pointer);break; /*打开文件*/
case 7:writetotext(pointer);break; /*保存文件*/
case 8:display(pointer,0,numstus-1);break; /*显示记录*/
case 0:
if(numstus!=0) printf("是否保存当前记录?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(pointer);
i=-1;break; /*退出系统*/
default:printf("请输入数字0~8:\n");i=1; /*输入错误*/
}
}
printf("\t\t======欢迎再次使用本系统======= \n");
display1();
}

『陆』 C语言 顺序线性表 实现学生成绩管理系统

/***************************头文件*********************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/***************************常量***********************************/
#define MENU_NUM 10
#define N 3
/****************************结构体********************************/
typedef struct s1
{
char no[10] ; //学号由10个字符组成
char name[15] ; //学生姓名
float score[N] ; //各门课成绩
float sum ; //总分
float average ; //平均分
struct s1 *next ; //指向后继结点的指针
}STUDENT; //定义结构体类型
/********************************全局变量*************************/
struct s1 * head=NULL; //链表头结点
/********************************函数声明*************************/
void InputData( STUDENT * ptr ); //录入信息
void PrintMenu( ); //显示菜单
int MenuSelect( ); //选择菜单项
void Init( ); //初始化
void create( ); //创建链表
void print( ) ; //打印链表数据
void Delete( ); //删除指定学号的记录数据
void append(); //追加一个数据到链表尾部
void computer(); //计算链表中所有人的总分和平均分
/***********************************主函数********************************/
void main()
{
int key;
while(1) {
key=MenuSelect();
switch(key)
{
case 1:
Init(); //初试化链表。也就是若链表不为空则释放链表中所有数据,将head置为空(NULL)
break;
case 2:
create(); //创建链表,输入数据
break;
case 3:
Delete(); //删除一个指定学号的记录数据
break;
case 4:
print(); //打印链表中所有数据
break;
case 5:
computer(); //计算链表中所有人的总分和平均分
break;
case 6:
append(); //追加一个数据到链表的尾部
break;
case 7:
Init(); //释放链表
exit(0);
}
}
}
/*****************************************************************
*函数名:PrintMenu
*
*描 述:显示操作菜单*
*
*入口参数:无
*
*出口参数:无
******************************************************************/
void PrintMenu( )
{
int i;
char * menu[]={
"-----------------------------------------------",
"| 基于指针和链表的学生成绩管理系统 |",
"| 1. 初始化链表 |",
"| 2. 创建链表 |",
"| 3. 删除指定学号的记录 |",
"| 4. 打印学生成绩信息 |",
"| 5. 计算学生的总分和平均分 |",
"| 6. 插入一条学生记录 |",
"| 7. 退出 |",
"-----------------------------------------------",
};
printf("\n\n");
for (i=0;i<MENU_NUM;i++)
printf("%s\n",menu[i]);
printf("\n输入要进行的操作(1-7):");
}
/*****************************************************************
*函数名:MenuSelect
*
*描 述:选择菜单选项,返回选择的选项
*
*入口参数:无
*
*出口参数:整型数据
******************************************************************/
int MenuSelect( )
{
int key;
PrintMenu( );
scanf("%d",&key);
return key;
}
/*****************************************************************
*函数名:Init
*
*描 述:初始化单链表。也就是释放链表中的所有数据
*
*入口参数:无
*
*出口参数:无
******************************************************************/
void Init( )
{
STUDENT *p,*ptr; //定义两个临时指针变量p,ptr
p=head;
ptr=head; //将两个临时变量指向头指针head ;
while(ptr!=NULL)
{
ptr=ptr->next; //ptr指向下一个结构数据
free(p); //释放p所指向的结构数据的内存
p=ptr; //将p指向ptr所指向的数据
}
head=NULL; //将head指向NULL
}
/*****************************************************************
*函数名:create
*
*描 述:创建单链表
*
*入口参数:无
*
*出口参数:无
******************************************************************/
void create( )
{
STUDENT *pt, *pth=NULL; //定义两个指针变量:pt指向即将申请新的数据内存,pth指向当前数据
while(1)
{
pt=(STUDENT *)malloc(sizeof(STUDENT)); //让pt指向新申请的内存空间
InputData(pt); //输入数据,存放到pt所指向的结构数据。注意让pt的next指向NULL
if (strcmp(pt->no,"@")==0)
{
free(pt); //释放pt所指向的内存空间
break; //退出循环
}
else if (head==NULL)
{
pth=pt;
head=pt; //将头指针head和pth指向pt
}
else
{
pth->next=pt; //将pth的next指向pt;
pth=pt; //将pth指向pt;
}
}
}
/*****************************************************************
*函数名:print
*
*描 述:打印单链表中所有数据
*
*入口参数:无
*
*出口参数:无
******************************************************************/
void print( )
{
int i=0;
STUDENT *p; //第一个指针p
p=head; //将p指向head
printf("\n");
printf("******************************STUDENT******************************\n");
printf("|rec| 学号 | 姓名 | 成绩1| 成绩2| 成绩3|总成绩| 平均成绩|\n");
printf("|---|----------|------------|------|------|------|------|---------|\n");
//打印表头
while (p!=NULL)
{
printf("|%3d|%10s|%-12s|%6.1f|%6.1f|%6.1f|%6.2f|%9.1f|\n",
++i,p->no,p->name,p->score[0],p->score[1],p->score[2],
p->sum,p->average); //打印p所指向的结构中的所有数据。注意打印数据间的分隔线
p=p->next; //将p指向p的下一个结构数据
}
printf("********************************END********************************\n");
//打印表尾
}
/*****************************************************************
*函数名:Delete
*
*描 述:删除指定学号的记录
*
*入口参数:无
*
*出口参数:无
******************************************************************/
void Delete( )
{
STUDENT *p,*pth; //定义两个指针p,pth
char no[11]; //定义一个整数no(用来存储输入的学号)
printf("输入要删除学生的学号:");
scanf("%s",no); //用输入语句输入一个学号存储到no中
p=head;pth=head; //将p和pth都指向头指针
if (strcmp(p->no,no)==0) //也就是若头指针指向的数据需要删除
{
head=head->next; //将head指针指向head的下一个数据;
free(p); //释放p所指向的数据
}
else
{
p=p->next; //将p指向p的下一个数据
while ( p!=NULL)
{
if (strcmp(p->no,no)==0) //找到了要删除的数据
{
pth->next=p->next; //将pth的next指向p的next
free(p); //释放p
break; //退出循环
}
else
{
pth=pth->next; //将pth指向pth的next 或 将pth指向p
p=p->next; //将p指向p的next
}
}
}
}
/*****************************************************************
*函数名:append
*
*描 述:增加学生记录
*
*入口参数:无
*
*出口参数:无
******************************************************************/
void append()
{
STUDENT *p,*pth; //定义两个指针变量p,pth
pth=head; //将pth指向head
while ( pth->next!=NULL)
{
pth=pth->next; //ptr指向ptr的next
}
p=(STUDENT *)malloc(sizeof(STUDENT)); //将p指向新申请的内存空间
InputData(p);
p->next=NULL; //数据数据存储到p所指向的内存空间,注意将p的next置为NULL
pth->next=p; //将ptr的next指向p
}
/*****************************************************************
*函数名:InputData
*
*描 述:输入学生信息
*
*入口参数:指针
*
*出口参数:无
******************************************************************/
void InputData( STUDENT *ptr )
{
int i;
printf("输入学号:");
scanf("%s",ptr->no);
if (strcmp(ptr->no,"@")==0 )
return;
printf("输入姓名:");
scanf("%s",ptr->name);
for(i=0;i<3;i++)
{
printf("输入成绩:");
scanf("%f",&ptr->score[i]);
}
ptr->sum=0;
ptr->average=0;
ptr->next=NULL; //不要忘记这一步
}
/*****************************************************************
*函数名:computer
*
*描 述:计算学生总成绩和平均成绩
*
*入口参数:无
*
*出口参数:无
******************************************************************/
void computer()
{
STUDENT *p;
p=head;
for(;p;p=p->next)
{
p->sum=p->score[0]+p->score[1]+p->score[2];
p->average=(p->score[0]+p->score[1]+p->score[2])/3;
}
}

『柒』 用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语言编写一个简单的学生成绩管理系统

C语言程序:

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

typedefstructstudent
{
charname[20]; /*姓名*/
intcode; /*学号*/
intkor,eng,math; /*3门课程的成绩*/
}STUDENT;

/*返回输入数据*/
STUDENTInput();

/*输出所有输入的数据*/
voidOutput(STUDENTinfo[],intcnt);

/*将输入分数转换为A-F*/
chargrade(intscore);

intmain()
{
STUDENTS[10];
intcnt=0,select;
inti,j;
intcode;

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

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

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

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

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

return0;
}

/*返回输入数据*/
STUDENTInput()
{
STUDENTstu;
printf(" 新学生信息 ");
printf(" 学号:");
scanf("%d",&stu.code);
printf(" 姓名:");
getchar();
gets(stu.name);
printf(" 3门课程成绩(以空格分隔):");
scanf("%d%d%d",&stu.kor,&stu.eng,&stu.math);

returnstu;
}

/*输出所有输入的数据*/
voidOutput(STUDENTinfo[],intcnt)
{
printf("学号:%d ",info[cnt].code);
printf("姓名:");
puts(info[cnt].name);
printf("成绩:%c%c%c ",grade(info[cnt].kor),grade(info[cnt].eng),grade(info[cnt].math));
}

/*将输入分数转换为A-F*/
chargrade(intscore)
{
if(score<0||score>100)
return'F';
if(score>=90)
return'A';
if(score>=80)
return'B';
if(score>=70)
return'C';
if(score>=60)
return'D';
else
return'E';
}


运行测试:

『玖』 c语言实现学生成绩管理系统

#include "stdio.h"
#include "time.h"
#include "stdlib.h"
#include"string.h"
#define N 100
void zhuomian();
void csh(struct stu *a,int n);
void csh1(struct stu *a,int n);
void input(struct stu *a,int n);
void output(struct stu *a,int n);
void npaixu(struct stu *a,int n);
void spaixu(struct stu *a,int n);
void Cpaixu(struct stu *a,int n);
void Apaixu(struct stu *a,int n);
void Dpaixu(struct stu *a,int n);
void shousu(struct stu *a,int n);
void shanchu(struct stu *a,int n);
void xiugai(struct stu *a,int n);
void baocun(struct stu *a,int n);
void qu(struct stu *a,int n);
void tuichu();
char ymi[8]="12345678";
static int m=0;
struct stu
{
char name[20];
char num[20];
char sex;
int age;
float score[3];
float sum;
float averge;
};
void main()
{
int i,a,c;
int f=0,m=0;
char mi[20];
struct stu b[N];
do
{
printf("\n\n\n");
printf("\t* * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\t* *\n");
printf("\t* 学生管理系统 *\n");
printf("\t* *\n");
printf("\t* 欢迎使用!! *\n");
printf("\t* *\n");
printf("\t* * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\t注:输入密码的长度小于20位数,否择自动登陆!\n");
printf("\t请输入管理员密码:");
for(i=0;i<20;i++)
{
mi[i]=getch();
printf("*");
if(mi[i]=='\x0d')
{
mi[i]='\0';
break;
}
}
printf("\n\t请稍后,正在登陆进入系统");
for(i=0;i<15;i++)
{
printf(".");
_sleep(250);
}
if(strcmp(mi,ymi)==0)
{
f=1;
printf("\n\t密码正确,马上进入系统!\n");
for(i=0;i<10;i++)
{
printf("\t");
_sleep(150);
}
break;
}
else
{
system("cls");
printf("\n密码错误,请重新输入!\n");
m++;
}
}while(m<3);
if(f==0)
{
printf("你已经连续3次输入错误,任意键自动退出\n");
exit(0);
}
system("cls");
while (1)
{
zhuomian();
scanf("%d",&a);
getchar();
switch(a)
{
case 1:
{
system("cls");
csh(b,N);
}break;
case 2:
{
do
{
system("cls");
printf("\t\t\t* * * * * * * * * * * * * * * * * *\n");
printf("\t\t\t*<1>按学号排列!! *\n");
printf("\t\t\t*<2>按总分排列!! *\n");
printf("\t\t\t*<3>按C语言排序!! *\n");
printf("\t\t\t*<4>按Access排序!! *\n");
printf("\t\t\t*<5>按Dreamweaver排序!! *\n");
printf("\t\t\t*<0>返回上一层! *\n");
printf("\t\t\t*请选择(0~5): *\n");
printf("\t\t\t* * * * * * * * * * * * * * * * * *\n");
scanf("\t\t\t%d",&c);
switch(c)
{
case 1:
{
system("cls");
npaixu(b,N);
output(b,N);
printf("任意键退出....");
getch();
}break;
case 2:
{
system("cls");
spaixu(b,N);
output(b,N);
printf("任意键退出....");
getch();
}break;
case 3:
{
system("cls");
Cpaixu(b,N);
output(b,N);
printf("任意键退出....");
getch();
}break;
case 4:
{
system("cls");
Apaixu(b,N);
output(b,N);
printf("任意键退出....");
getch();
}break;
case 5:
{
system("cls");
Dpaixu(b,N);
output(b,N);
printf("任意键退出....");
getch();
}break;
case 0:system("cls");break;
default:system("cls");break;
}
}while(c!=0);
}break;
case 3:
{
system("cls");
shousu(b,N);
}break;
case 4:
{
system("cls");
output(b,N);
printf("任意键退出....");
getch();
}break;
case 5:
{
system("cls");
input(b,N);
printf("增加记录完毕!!\n");
}break;
case 6:
{
system("cls");
shanchu(b,N);
}break;
case 7:
{
system("cls");
xiugai(b,N);
}break;
case 8:
{
baocun(b,N);
}break;
case 9:
{
qu(b,N);
}break;
case 0:tuichu();break;
default:printf("不存在,请选择(0~9)!! \n");break;
}
}
}
void zhuomian()
{
system("cls");
printf("\n\n\n");
printf("\t\t+--------------------------------------------+\n");
printf("\t\t| 学生成绩管理系统 |\n");
printf("\t\t+--------------------------------------------+\n");
printf("\t\t| 1、初始化或追加一条记录 |\n");
printf("\t\t+--------------------------------------------+\n");
printf("\t\t| 2、按排序输出 |\n");
printf("\t\t| 3、收索记录 |\n");
printf("\t\t| 4、浏览记录(不排序) |\n");
printf("\t\t+--------------------------------------------+\n");
printf("\t\t| 5、插入记录 6、删除记录 |\n");
printf("\t\t| 7、修改记录 |\n");
printf("\t\t+--------------------------------------------+\n");
printf("\t\t| 8、保存记录 9、读取记录 |\n");
printf("\t\t| 0、退出 |\n");
printf("\t\t+--------------------------------------------+\n");
printf("\t\t请选择(0~9):");
}
void csh(struct stu *a,int n)
{
int i,c=0;
int h=0;
for(i=m;i>0;i--)
{
a[i]=a[i+1];
m--;
}
printf("初始化完毕!是否增加新记录(1/0)!");
scanf("%d",&c);
if(c==1)
{
for(i=m;i<n;i++)
{
printf("请输入学号:\n");
scanf(" %s",a[i].num);
printf("姓名:\n");
scanf(" %s",a[i].name);
printf("性别(b/g):\n");
scanf(" %c",&a[i].sex);
printf("年龄:\n");
scanf("%d",&a[i].age);
a[i].sum=0;
printf("C语言的成绩:\n");
scanf("%f",&a[i].score[0]);
printf("Access的成绩:\n");
scanf("%f",&a[i].score[1]);
printf("Dreamweaver的成绩:\n");
scanf("%f",&a[i].score[2]);
a[i].sum=a[i].sum+a[i].score[0]+a[i].score[1]+a[i].score[2];
a[i].averge=a[i].sum/3;
m++;
printf("请输入1继续0结束!!\n");
scanf("%d",&h);
if(h==1)
continue;
else
break;
}
}
}
void input(struct stu *a,int n)
{
int i;
int h=0;

for(i=m;i<n;i++)
{
printf("请输入学号:\n");
scanf(" %s",a[i].num);
printf("姓名:\n");
scanf(" %s",a[i].name);
printf("性别(b/g):\n");
scanf(" %c",&a[i].sex);
printf("年龄:\n");
scanf("%d",&a[i].age);
a[i].sum=0;
printf("C语言的成绩:\n");
scanf("%f",&a[i].score[0]);
printf("Access的成绩:\n");
scanf("%f",&a[i].score[1]);
printf("Dreamweaver的成绩:\n");
scanf("%f",&a[i].score[2]);
a[i].sum=a[i].sum+a[i].score[0]+a[i].score[1]+a[i].score[2];
a[i].averge=a[i].sum/3;
m++;
printf("请输入1继续0结束!!\n");
scanf("%d",&h);
if(h==1)
continue;
else
break;
}
}
void output(struct stu *a,int n)
{
int i;
int j;
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("学号\t姓名\t性别\t年龄\tc语言\tAccess\tDreamweaver\t总分\t平均分\n");
for(i=0;i<m;i++)
{
printf("%s\t",a[i].num);
printf("%s\t",a[i].name);
printf(" %c\t",a[i].sex);
printf("%d\t",a[i].age);
for(j=0;j<3;j++)
{
printf("%.1f\t ",a[i].score[j]);

}
printf("\t%.1f\t %.1f",a[i].sum,a[i].averge);
printf("\n");
}
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
}
void npaixu(struct stu *a,int n)
{
int i,j;
struct stu temp;
for(i=1;i<=m-1;i++)
{
for(j=0;j<=m-i-1;j++)
{
if(strcmp(a[j].num,a[j+1].num)>0)
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
void spaixu(struct stu *a,int n)
{
int i,j;
struct stu temp;
for(i=1;i<=m-1;i++)
{
for(j=0;j<=m-i-1;j++)
{
if(a[j].sum<a[j+1].sum)
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
void Cpaixu(struct stu *a,int n)
{
int i,j;
struct stu temp;
for(i=1;i<=m-1;i++)
{
for(j=0;j<=m-i-1;j++)
{
if(a[j].score[0]<a[j+1].score[0])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
void Apaixu(struct stu *a,int n)
{
int i,j;
struct stu temp;
for(i=1;i<=m-1;i++)
{
for(j=0;j<=m-i-1;j++)
{
if(a[j].score[1]<a[j+1].score[1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
void Dpaixu(struct stu *a,int n)
{
int i,j;
struct stu temp;
for(i=1;i<=m-1;i++)
{
for(j=0;j<=m-i-1;j++)
{
if(a[j].score[2]<a[j+1].score[2])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}

void shousu(struct stu *a,int n)
{
char snum[20];
int i,j,d=0;
do
{
printf("请输入你要查找的学号\n");
scanf("%s",snum);
for(i=0;i<m;i++)
{
if(strcmp(a[i].num,snum)==0)
{
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("学号\t姓名\t性别\t年龄\tc语言\tAccess\tDreamweaver\t总分\t平均分\n");
printf("%s\t",a[i].num);
printf("%s\t",a[i].name);
printf(" %c\t",a[i].sex);
printf("%d\t",a[i].age);
for(j=0;j<3;j++)
{
printf("%.1f\t ",a[i].score[j]);

}
printf("\t%.1f\t %.1f",a[i].sum,a[i].averge);
printf("\n");
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("收索成功\n");
break;
}

}
if(i==m)
{
printf("你输入的学号不存在!\n");
}
printf("是否继续查询?(1/0)\n");
scanf("%d",&d);
system("cls");
}while(d==1);
}
void shanchu(struct stu *a,int n)
{
int c=0;
int i,j,d;
char snum[20];
do
{
printf("请输入要删除的学号\n");
scanf("%s",snum);
for(i=0;i<n;i++)
{
if(strcmp(a[i].num,snum)==0)
{
printf("学号\t姓名\t性别\t年龄\tc语言\tAccess\tDreamweaver\t总分\t平均分\n");
printf("%s\t",a[i].num);
printf("%s\t",a[i].name);
printf(" %c\t",a[i].sex);
printf("%d\t",a[i].age);
for(j=0;j<3;j++)
{
printf("%.1f\t ",a[i].score[j]);
}
printf("\t%.1f\t %.1f",a[i].sum,a[i].averge);
printf("\n");
printf("是否删除此记录(1/0)\n");
scanf("%d",&c);
if(c==1)
{
a[i]=a[i+1];
m--;
printf("删除成功!\n");break;
}
else
break;
}
}
if(i==n)
{
printf("你输入的学号不存在!\n");
}
if(c==1)
{
printf("是否继续删除1继续0退出(1/0)!\n");
scanf("%d",&d);
system("cls");
}
}while(d==1);
}
void xiugai(struct stu *a,int n)
{
int i,j,c=0,d,f=0;
char snum[20];
float xscore[3];
char xn[20];
do
{
printf("请输入要修改的学号\n");
scanf("%s",snum);
for(i=0;i<m;i++)
{
if(strcmp(a[i].num,snum)==0)
{
printf("学号\t姓名\t性别\t年龄\tc语言\tAccess\tDreamweaver\t总分\t平均分\n");
printf("%s\t",a[i].num);
printf("%s\t",a[i].name);
printf(" %c\t",a[i].sex);
printf("%d\t",a[i].age);
for(j=0;j<3;j++)
{
printf("%.1f\t ",a[i].score[j]);
}
printf("\t%.1f\t %.1f",a[i].sum,a[i].averge);
printf("\n");
printf("是否修改此记录(1/0)\n");
scanf("%d",&c);
if(c==1)
{
do
{
system("cls");
printf("\t\t请选者你要修改的记录,0返回上级菜单\n");
printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\t* <1> c语言 <2> Access *\n");
printf("\t* <3> Dreamweaver <4> 姓名 *\n");
printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
scanf("%d",&d);
switch(d)
{
case 1:
{
printf("请输入修改的成绩\n");
scanf("%f",&xscore[0]);
a[i].score[0]=xscore[0];
printf("修改成功!\n");
printf("任意键返回上级菜单....");
getch();
}break;
case 2:
{
printf("请输入修改的成绩\n");
scanf("%f",&xscore[1]);
a[i].score[1]=xscore[1];
printf("修改成功!\n");
printf("任意键返回上级菜单....");
getch();
}break;
case 3:
{
printf("请输入修改的成绩\n");
scanf("%f",&xscore[2]);
a[i].score[2]=xscore[2];
printf("修改成功!\n");
printf("任意键返回上级菜单....");
getch();
}break;
case 4:
{
printf("\t\t请输入修改的姓名\n");
scanf("\t\t%s",xn);
strcpy(a[i].name,xn);
printf("修改成功!\n");
printf("任意键返回上级菜单....");
getch();
}break;
case 0:break;
default:printf("\t\t不存在,请选择(1~4)!! \n");break;
}
}while(d!=0);break;
}
}
}
if(i==m)
{
printf("你输入的学号不存在!是否继续修改(1/0)!\n");
scanf("%d",&f);
}
}while(f==1);
}

void baocun(struct stu *a,int n)//保存记录
{
int i,c=0;
FILE* fp;
system("cls");
output(a,n);
printf("是否保存改记录(1/0)");
scanf("%d",&c);
if(c==1)
{
if((fp=fopen("d:\zhang.txt","w+"))==NULL)
printf("无发打开\n");
else
{
fprintf(fp,"学号\t姓名\t性别\t年龄\tc语言\tAccess\tDreamweaver\t总分\t平均分\n");
for(i=0;i<m;i++)
{
fprintf(fp,"%s\t",a[i].num);
fprintf(fp,"%s\t",a[i].name);
fprintf(fp,"%c\t",a[i].sex);
fprintf(fp,"%d\t",a[i].age);
fprintf(fp,"%.1f\t",a[i].score[0]);
fprintf(fp,"%.1f\t",a[i].score[1]);
fprintf(fp,"%.1f\t",a[i].score[2]);
fprintf(fp,"%.1f\t",a[i].averge);
fprintf(fp,"%.1f\t",a[i].sum);
fprintf(fp,"\n");
}
fclose(fp);
printf("保存成功!\n请稍后,系统自动返回!!\n");
for(i=0;i<10;i++)
{
printf("\t");
_sleep(150);
}
}
}
}
void qu(struct stu *a,int n)
{
int i;
FILE* fp;
system("cls");
if((fp=fopen("d:\zhang.txt","r"))==NULL)
printf("不能打开此文件\n");
fseek(fp,58L,0);
while(!feof(fp))
{
fscanf(fp,"%s\t",a[m].num);
fscanf(fp,"%s\t",a[m].name);
fscanf(fp,"%c\t",&a[m].sex);
fscanf(fp,"%d\t",&a[m].age);
fscanf(fp,"%f\t",&a[m].score[0]);
fscanf(fp,"%f\t",&a[m].score[1]);
fscanf(fp,"%f\t",&a[m].score[2]);
fscanf(fp,"%f\t",&a[m].averge);
fscanf(fp,"%f\t",&a[m].sum);
m++;
}
fclose(fp);
printf("读取成功!\n请稍后,系统自动返回!!\n");
for(i=0;i<10;i++)
{
printf("\t");
_sleep(150);
}
}
void tuichu()
{
system("cls");
printf("\n\n");
printf("\t\t* * * * * * * * * * * * * * * * * * * * *\n");
printf("\t\t* 欢迎使用学生管理系统,任意键退出! *\n");
printf("\t\t* * * * * * * * * * * * * * * * * * * * *\n");
exit(0);
}虽然只有50分,但我也给你啦 !我刚做好的呢!因为我们老师也叫我们做!觉得满意吧!!

热点内容
武汉大学学生会辅导员寄语 发布:2021-03-16 21:44:16 浏览:612
七年级学生作文辅导学案 发布:2021-03-16 21:42:09 浏览:1
不屑弟高考成绩 发布:2021-03-16 21:40:59 浏览:754
大学毕业证会有成绩单 发布:2021-03-16 21:40:07 浏览:756
2017信阳学院辅导员招聘名单 发布:2021-03-16 21:40:02 浏览:800
查询重庆2018中考成绩查询 发布:2021-03-16 21:39:58 浏览:21
结业考试成绩怎么查询 发布:2021-03-16 21:28:40 浏览:679
14中医医师资格笔试考试成绩查分 发布:2021-03-16 21:28:39 浏览:655
名著赏析课程标准 发布:2021-03-16 21:27:57 浏览:881
北京大学商业领袖高端培训课程 发布:2021-03-16 21:27:41 浏览:919