当前位置:首页 » 考试成绩 » 学生成绩管理系统的详细设计

学生成绩管理系统的详细设计

发布时间: 2020-12-23 07:27:15

学生成绩管理系统(C语言)的设计方法论述

程序设计的基本目标是用算法对问题的原始数据进行处理,从而获得所期望的效果。但这仅仅是程序设计的基本要求。要全面提高程序的质量,提高编程效率,使程序具有良好的可读性、可靠性、可维护性以及良好的结构,编制出好的程序来,应当是每位程序设计工作者追求的目标。而要做到这一点,就必须掌握正确的程序设计方法和技术。而C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。所以采用结构化程序设计方法,对管理系统进行自顶向下,逐步细化,模块化设计.

对题目的需求分析得出:管理系统对学生的成绩信息进行管理,学生信息包括:学号、姓名、学期、每门课程的成绩、平均成绩、名次。实现:学生信息的录入;修改;删除和查询,按学期、学号、姓名等查询。
而对输入的学生成绩正确的计算了平均分、最高分、最低分、统计了不及格情况及各分数段的人数。并按要求的格式正确打印.
【功能函数设计】
这个程序比较烦琐,要求计算平均分,还要算最高分、最低分、统计不及格人数和按不同科目的分数顺序输出,如果每一个都写一个函数,程序会非常的大,同时效率也不是很高。在此用的应该是一种比较好的方法,此处用到了以下几个函数:
输入函数:
void input (mark *s)/*数据输入函数*/
输出函数:
void print (mark *p)/*输出学生的记录的函数*/
void den(mark *p,mark *q,int *m)/*该函数的功能是将第一个的记录赋给第二个*/
此函数是为后面的sign函数的调用,把一个人的信息存在一个链表中,
void converse (mark *s,fsp *q)/*将学生的记录转放到中间变量q中*/
此函数实现的功能是把数学,英语,计算机的个作为一个链表存储在一起,为后面的过程更简便。
void sign(mark *s,mark *a,mark *b,mark *c,mark *d,fsp *q)
此函数的功能是对学生的各科成绩及平均分进行排序。
void count(mark *s) /*统计各科平均分 各科的最高(低)分及各分数段的人数*/
void found(mark *s)/*输入学生的学号查询学生的成绩情况*/

(1) 程序清单
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define N 7 /*学生的人数*/
typedef struct
{
char num[5];
char name[10]; /*记录姓名和学号*/
float math,english,comput,average; /*各个科目及平均分*/
}mark; /*定义学生记录结构体类型*/
typedef struct
{
float fen[4];
int n;
}fsp;/*定义学生记录转化的中间变量*/
void input (mark *s)/*数据输入函数*/
{
int i;
mark *p;
printf("请输入每个学生的记录\n");
for(i=0,p=s;i<N;i++,p++)
{
scanf("%s%s%f%f%f",p->num,p->name,&p->math,&p->english,&p->comput);
p->average=(p->math+p->english+p->comput)/3;
}
}
void print (mark *p)/*输出学生的记录的函数*/
{
int i;
mark *s;
for(i=0,s=p;i<N;i++,s++)
printf("%s %s %.1f %.1f %.1f %.1f\n", s->num,s->name,s->math,s->english,s->comput,s->average);
}
void den(mark *p,mark *q,int *m)/*该函数的功能是将第一个的记录赋给第二个*/
{
int i; /*m中存放学生的位序号(按成绩排序)*/
for(i=0;i<N;i++)
{ strcpy((q+i)->num,(p+*(m+i))->num);
strcpy((q+i)->name,(p+*(m+i))->name);
(q+i)->math=(p+*(m+i))->math;
(q+i)->english=(p+*(m+i))->english;
(q+i)->comput=(p+*(m+i))->comput;
(q+i)->average=(p+*(m+i))->average;
}
}
void converse (mark *s,fsp *q)/*将学生的记录转放到中间变量q中*/
{
fsp *p;
int i;
for(i=0,p=q;i<N;i++,p++)
{ p->n=i;
*(p->fen)=(s+i)->math;
*(p->fen+1)=(s+i)->english;
*(p->fen+2)=(s+i)->comput;
*(p->fen+3)=(s+i)->average;
}
}
void sign(mark *s,mark *a,mark *b,mark *c,mark *d,fsp *q)
{ /*对学生的各科成绩及平均分进行排序*/
int t[N],i,j,k,x,n;/*t中存放学生的位序号(按成绩排序)*/
float temp;/*排序过程中的中间变量 */
for(i=0;i<4;i++)/*i的不同指向不同的科目及平均成绩 */
{ for(j=0;j<N;j++)
{ temp=*((q+j)->fen+i); x=j;/*初始化中间变量*/
for(k=j+1;k<N;k++)
if( *((q+k)->fen+i)<temp )
{ x=k; temp=*((q+k)->fen+i);}
if(x!=j)
{ temp=*((q+j)->fen+i);
*((q+j)->fen+i)=*((q+x)->fen+i);
*((q+x)->fen+i)=temp;
n=(q+j)->n; (q+j)->n=(q+x)->n; (q+x)->n=n;
}/*交换两变量 */
t[j]=(q+j)->n;
}
switch(i)
{ case 0: den(s,a,t);break;
case 1: den(s,b,t);break;
case 2: den(s,c,t);break;
case 3: den(s,d,t);break;
}
}
}
void count(mark *s)/*统计各科平均分 各科的最高(低)分及各分数段的人数*/
{
float ave[3]={0};/*存放各科平均分 */
float m[3][2] ;
int num[3][5]={0};/*存放各分数段的人数*/
int i;
m[0][1]=m[0][0]=s->math;
m[1][0]=m[1][1]=s->english;
m[2][0]=m[2][1]=s->comput;
for(i=0;i<N;i++)
{ ave[0]+=(s+i)->math;
ave[1]+=(s+i)->english;
ave[2]+=(s+i)->comput;
if( (s+i)->math > m[0][0] )
m[0][0]=(s+i)->math;
else if( (s+i)->math < m[0][1] )
m[0][1]=(s+i)->math;
if( (s+i)->english > m[1][0] )
m[1][0]=(s+i)->english;
else if( (s+i)->english < m[1][1] )
m[1][1]=(s+i)->english;

if( (s+i)->comput > m[2][0] )
m[2][0]=(s+i)->comput;
else if( (s+i)->comput < m[2][1] )
m[2][1]=(s+i)->comput;
/*统计各科的最高(低)分*/
if((s+i)->math<60.0)
num[0][0]++;
else if((s+i)->math<70.0)
num[0][1]++;
else if((s+i)->math<80.0)
num[0][2]++;
else if((s+i)->math<90.0)
num[0][3]++;
else num[0][4]++;
/*统计数学各分数段的人数*/
if((s+i)->english<60.0)
num[1][0]++;
else if((s+i)->english<70.0)
num[1][1]++;
else if((s+i)->english<80.0)
num[1][2]++;
else if((s+i)->english<90.0)
num[1][3]++;
else num[1][4]++;
/*统计英语各分数段的人数*/
if((s+i)->comput<60.0)
num[2][0]++;
else if((s+i)->comput<70.0)
num[2][1]++;
else if((s+i)->comput<80.0)
num[2][2]++;
else if((s+i)->comput<90.0)
num[2][3]++;
else num[2][4]++;
/*统计计算机各分数段的人数 */
}
for(i=0;i<3;i++)
ave[i]=ave[i]/N;
printf("三门科的平均分分别为:\n%.1f %.1f %.1f\n",ave[0],ave[1],ave[2]);
printf("三门科的最高分与最底分分别为:\n");
printf("%.1f %.1f\n%.1f %.1f\n%.1f %.1f\n",
m[0][0],m[0][1],m[1][0],m[1][1],m[2][0],m[2][1]);
printf("三门科不及格 60-69 70-79 80-89 90分以上的人数分别为:\n");
printf("数学: %3d%5d%6d%6d%4d\n",num[0][0],num[0][1],num[0][2],num[0][3],num[0][4]);
printf("英语: %3d%5d%6d%6d%4d\n",num[1][0],num[1][1],num[1][2],num[1][3],num[1][4]);
printf("计算机:%3d%5d%6d%6d%4d\n",num[2][0],num[2][1],num[2][2],num[2][3],num[2][4]);
}
void found(mark *s)/*输入学生的学号查询学生的成绩情况*/
{
char a[10];/*接受输入的学号*/
int flag,i;/*循环变量*/
char * b="exit";
do
{ flag=0;
printf("请输入所要查询的学生的学号或姓名\n");
getchar();
gets(a);
for(i=0;i<N;i++)
if(strcmp(a,(s+i)->num)==0 || strcmp(a,(s+i)->name)==0 )
{printf("该生的学号,姓名,各门课程及平均成绩为:\n%s %s %.1f %.1f %.1f %.1f\n"
,(s+i)->num,(s+i)->name,(s+i)->math,(s+i)->english,(s+i)->comput,(s+i)->average);/*成绩打印*/
flag=1;}
if(flag==0) printf("查无此人\n");
}while(strcmp(a,b));
printf("查询结束");
}
main()
{
mark *s,*a,*b,*c,*d;
fsp *p;
s=(mark*)malloc(N*sizeof(mark));
a=(mark*)malloc(N*sizeof(mark));
b=(mark*)malloc(N*sizeof(mark));
c=(mark*)malloc(N*sizeof(mark));
d=(mark*)malloc(N*sizeof(mark));
p=(fsp*)malloc(N*sizeof(fsp));/*各变量空间开辟 */
input(s);
printf("初始化学生的记录为:\n");
print(s);
converse(s,p);
sign(s,a,b,c,d,p);
printf("按数学成绩排序学生的记录为:\n");
print(a);
printf("按英语成绩排序学生的记录为:\n");
print(b);
printf("按计算机成绩排序学生的记录为:\n");
print(c);
printf("按平均成绩排序学生的记录为:\n");
print(d);
count(s);
found(s);
getch();
}

Ⅱ 学生成绩管理系统设计

我是赵文滔
#include<stdio.h>
#include<string.h>
#define SIZE 2
struct xs
{
int num;
char name[20];
float yingyu;
float shuxue;
float pingjun;

}xuesheng[SIZE+1],*p=xuesheng;

void main()
{
int a,i,j,k=0,m,n,t;
char b[20],c;
do{
printf("请输入选项:\n1输入学生成绩\n2按姓名查询学生成绩\n3按学号查找学生成绩\n4按姓名排序\n5按学号排序\n6按成绩排序\n7打印学生成绩\n");
scanf("%d",&a);
if(a==1)
{
printf("请输入学生姓名、学号、英语成绩、数学成绩\n");
for(i=1;i<=SIZE;i++)
{
scanf("%s %d %f %f",xuesheng[i].name ,&xuesheng[i].num ,&xuesheng[i].yingyu ,&xuesheng[i].shuxue );
xuesheng[i].pingjun =(xuesheng[i].yingyu+xuesheng[i].shuxue)/2;
}
m=0;
}
else {printf("请先输入数据\n");m=1;}
}while(m==1);

do
{printf("是否进行其他操作?1/0\n");
scanf("%d",&k);
if(k==1)
{
printf("请再次输入选择\n");
scanf("%d",&a);
if(a==2)
{
printf("请输入要查询的姓名\n");
scanf("%s",b);
for(i=1;i<=SIZE;i++)
{
if(strcmp(b,xuesheng[i].name)==0)printf("姓名:%s学号%d英语成绩%f数学成绩:%f平均成绩%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );
}
}
if(a==3)
{
printf("请输入要查询的学号\n");
scanf("%d",&m);
printf("姓名:%s学号%d英语成绩%f数学成绩:%f平均成绩%f",xuesheng[m-1000].name ,xuesheng[m-1000].num ,xuesheng[m-1000].yingyu ,xuesheng[m-1000].shuxue,xuesheng[m-1000].pingjun );
}
if(a==4)
{
printf("按姓名排序如下:\n");
for(i=1;i<=SIZE;i++)
{ for(j=i+1;j<=SIZE;j++)
if(strcmp(xuesheng[i].name,xuesheng[j].name)>0){*p=xuesheng[j];xuesheng[j]=xuesheng[i];xuesheng[i]=*p;}
}
for(i=1;i<=SIZE;i++)
printf("姓名:%s学号%d英语成绩%f数学成绩:%f平均成绩%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );

}
if(a==5)
{
printf("按学号排序如下:\n");

for(i=1;i<=SIZE;i++)
for(j=i+1;j<=SIZE;j++)
if(xuesheng[i].num>xuesheng[j].num){*p=xuesheng[j];xuesheng[j]=xuesheng[i];xuesheng[i]=*p;}
for(i=1;i<=SIZE;i++)
printf("姓名:%s学号%d英语成绩%f数学成绩:%f平均成绩%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );

}
if(a==6)
{
printf("按平均成绩排序如下:\n");

for(i=1;i<=SIZE;i++)
for(j=i+1;j<=SIZE;j++)
if(xuesheng[i].pingjun>xuesheng[j].pingjun){*p=xuesheng[j];xuesheng[j]=xuesheng[i];xuesheng[i]=*p;}
for(i=1;i<=SIZE;i++)
printf("姓名:%s学号%d英语成绩%f数学成绩:%f平均成绩%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );

}
if(a==7)
{
printf("按学号输出如下:\n");

for(i=1;i<=SIZE;i++)
for(j=i+1;j<=SIZE;j++)
if(xuesheng[i].num>xuesheng[j].num){*p=xuesheng[j];xuesheng[j]=xuesheng[i];xuesheng[i]=*p;}
for(i=1;i<=SIZE;i++)
printf("姓名:%s学号%d英语成绩%f数学成绩:%f平均成绩%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );
}
if(a==0)printf("谢谢使用\n");
if(a==8||a==9)printf("请重新输入\n");

}
}while(a!=0);
}

Ⅲ 简单的学生成绩管理系统的设计

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; /* */
struct student
{
char num[10];/* 学号 */
char name[20];
char sex[10];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];/* 最近更新时间 */
};

typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;

void menu()
{
printf("********************************************************************************");
printf("\t1登记学生资料\t\t\t\t\t2删除学生资料\n");
printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n");
printf("\t5保存学生资料\t\t\t\t\t0退出系统\n");
printf("********************************************************************************\n");
}

void printstart()
{
printf("-----------------------------------------------------------------------\n");
}
void Wrong()
{
printf("\n=====>提示:输入错误!\n");
}

void Nofind()
{
printf("\n=====>提示:没有找到该学生!\n");
}

void printc() /* 本函数用于输出中文 */
{
printf(" 学号\t 姓名 性别 英语成绩 数学成绩 C语言成绩 总分 平均分\n");
}

void printe(Node *p)/* 本函数用于输出英文 */
{
printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);
}

Node* Locate(Link l,char findmess[],char nameornum[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */
{
Node *r;
if(strcmp(nameornum,"num")==0) /* 按学号查询 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查询 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}
void Add(Link l) /* 增加学生 */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; /* 将指针置于最末尾 */
while(1)
{
printf("请你输入学号(以'0'返回上一级菜单:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
}
p=(Node *)malloc(sizeof(Node));
strcpy(p->data.num,num);
printf("请你输入姓名:");
scanf("%s",p->data.name);
getchar();
printf("请你输入性别:");
scanf("%s",p->data.sex);
getchar();
printf("请你输入c语言成绩:");
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入数学成绩:");
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入英语成绩:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle / 3;
/* 信息输入已经完成 */
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;
}
}

void Qur(Link l) /* 查询学生 */
{
int sel;
char findmess[20];
Node *p;
if(!l->next)
{
printf("\n=====>提示:没有资料可以查询!\n");
return;
}
printf("\n=====>1按学号查找\n=====>2按姓名查找\n");
scanf("%d",&sel);
if(sel==1)/* 学号 */
{
printf("请你输入要查找的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2) /* 姓名 */
{
printf("请你输入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();

}

void Del(Link l) /* 删除 */
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:没有资料可以删除!\n");
return;
}
printf("\n=====>1按学号删除\n=====>2按姓名删除\n");
scanf("%d",&sel);
if(sel==1)
{
printf("请你输入要删除的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:该学生已经成功删除!\n");
shoudsave=1;
}
else
Nofind();
}
else if(sel==2)
{
printf("请你输入要删除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:该学生已经成功删除!\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}

void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:没有资料可以修改!\n");
return;
}
printf("请你输入要修改的学生学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("请你输入新学号(原来是%s):",p->data.num);
scanf("%s",p->data.num);
printf("请你输入新姓名(原来是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("请你输入新性别(原来是%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("请你输入新的c语言成绩(原来是%d分):",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入新的数学成绩(原来是%d分):",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入新的英语成绩(原来是%d分):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf("\n=====>提示:资料修改成功!\n");
shoudsave=1;
}
else
Nofind();

}

void Disp(Link l)
{
int count=0;
Node *p;
p=l->next;

if(!p)
{
printf("\n=====>提示:没有资料可以显示!\n");
return;
}
printf("\t\t\t\t显示结果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}

void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点 */
Node *r=l->next;
if(!r)
{
printf("\n=====>提示:没有资料可以统计!\n");
return ;
}
pm=pe=pc=pt=pa=r;
while(r!=NULL)
{
if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r->data.mgrade>=pm->data.mgrade)
pm=r;
if(r->data.egrade>=pe->data.egrade)
pe=r;
if(r->data.totle>=pt->data.totle)
pt=r;
if(r->data.ave>=pa->data.ave)
pa=r;

r=r->next;
}
printf("------------------------------统计结果--------------------------------\n");
printf("总分最高者:\t%s %d分\n",pt->data.name,pt->data.totle);
printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave);

printf("英语最高者:\t%s %d分\n",pe->data.name,pe->data.egrade);
printf("数学最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade);
printf("c语言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade);
printstart();
}

void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;

ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表 */
ll->next=NULL;

if(l->next==NULL)
{
printf("\n=====>提示:没有资料可以排序!\n");
return ;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息 */
s->data=p->data;
s->next=NULL;

rr=ll;
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:排序已经完成!\n");
}

void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\student","wb");
if(fp==NULL)
{
printf("\n=====>提示:重新打开文件时发生错误!\n");
exit(1);
}
p=l->next;

while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count);
shoudsave=0;
}
fclose(fp);
}

int main()
{
Link l;/* 连表 */
FILE *fp; /* 文件指针 */
int sel;
char ch;
char jian;

int count=0;
Node *p,*r;

l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;

fp=fopen("C:\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb");
else
exit(0);
}
printf("\n=====>提示:文件已经打开,正在导入记录......\n");

while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) /* 将文件的内容放入接点中 */
{
p->next=NULL;
r->next=p;
r=p; /* 将该接点挂入连中 */
count++;
}
}

fclose(fp); /* 关闭文件 */
printf("\n=====>提示:记录导入完毕,共导入%d条记录.\n",count);

while(1)
{
menu();
printf("请你选择操作:");
scanf("%d",&sel);

if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n=====>提示:你已经退出系统,再见!\n");
break;
}
switch(sel)
{
case 1:Add(l);break; /* 增加学生 */
case 2:Del(l);break;/* 删除学生 */
case 3:Qur(l);break;/* 查询学生 */
case 4:Modify(l);break;/* 修改学生 */
case 5:Save(l);break;/* 保存学生 */
case 9:printf("\t\t\t==========帮助信息==========\n");break;
default: Wrong();getchar();break;
}
}
system("pause");
return 0;
}

Ⅳ 学生成绩管理系统课程设计

你好,我曾用c++学生成绩管理系统的程序,希望能对你有所帮助。
#include <string.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
/*------------------------------------定义类部分------------------------------------------------*/
class Node
{
char name[10];
int score;
class Node *next;
public:
Node* CreateNode(int n);
void PrinfListNode(Node *h);
void InsertList(Node *h,int i,char name[],int e,int *n);
void DeleteList(Node *h,int i,int *n);
Node* operator +=(Node *p);
Node *Unique(Node *p,int *n);
};
void DisplayNote(void);

/*--------------------建立单链表的成员函数,单链表节点的个数不确定--------------------------------*/
Node *Node::CreateNode(int n)
{
Node *head;
Node *pre,*p;
int i;
head=(Node*)malloc(sizeof(Node)); //用malloc动态申请内存,个数作为函数的输入参数
head->next=NULL;
pre=head;
for (i=1;i<=n;i++)
{
printf("请输入学生姓名:",i);
p=(Node*)malloc(sizeof(Node));
scanf("%s",p->name);
printf("请输入此学生的分数:",i);
scanf("%d",&p->score);
pre->next=p;
pre=p;
}
p->next=NULL;
return head;
}
/*---------------------------------输出链表函数实现部分------------------------------------------*/
void Node::PrinfListNode(Node *h)
{
Node *p;
p=h->next;
while(p)
{
printf("name:%s\tscore:%d",p->name,p->score);
p=p->next;
printf("\n");
}
}
/*----------------------------实现单链表的插入操作的成员函数--------------------------------------*/
void Node::InsertList(Node *h,int i,char name[],int e,int *n)
{
Node *p,*q;
int j;
if (i<1||i>(*n)+1)
{
printf("出错啦!请重试!.\n");
}
else
{
j=0;p=h;
while(j<i-1)
{
p=p->next;
j++;
}
q=(Node *)malloc(sizeof(Node));
strcpy(q->name,name);
q->score=e;
q->next=p->next;
p->next=q;
(*n)++;
}
}
/*-----------------------------实现单链表的删除操作的成员函数-------------------------------------*/
void Node::DeleteList(Node *h,int i,int *n)
{
Node *p,*q;
int j;
char name[10];
int score;
if (i<1||i>(*n))
{
printf("出错啦!请重试!.\n");
}
else
{
j=0;p=h;
while(j<i-1)
{
p=p->next;
j++;
}
q=p->next;
p->next=q->next;
strcpy(name,q->name);
score=q->score;
free(q);
(*n)--;
}
}
/*--------------------------重载运算符“+=”实现两个链表对象合并功能------------------------------*/
Node *Node::operator +=(Node *p)
{
Node *q=this;
while(q->next!=NULL) //把第一个链表最后的next指向第二个的头
{
q=q->next;
}
q->next=p->next;
return this;
}
/*----------------编写Unique()成员函数,实现剔除链表中重复元素,使所有节点值唯-----------------*/
Node *Node::Unique(Node *p,int *n)
{ Node *q=this,*k,*m;
int i;
if((*n)<=1) //用循环,拿一个和每一个去比较,一样的删除使用已经写好的删除函数
cout<<"ERROR!"<<endl;
else
{
for(i=1;i<(*n);q=q->next)
{
k=q;
p=q->next;
while(p!=NULL)
{
if(strcmp(q->name,p->name)==0)
{
m=p;
p=p->next;
k->next=m->next;
free(m);
(*n)--;
}
else{
k=p;
p=p->next;
}

}
}
}
return this;
}
/*--------------------------------编写主函数测试上述功能---------------------------------------*/
int main()
{
Node *h,*k;
int i=1,n,score;
char name[10];
int *m=0;
while(i)
{
DisplayNote();
scanf("%d",&i);
switch(i)
{
case 1:
printf("请输入表中成员的个数:\n");
scanf("%d",&n);
h=h->CreateNode(n);
printf("表中成员为:\n");
h->PrinfListNode(h);
break;
case 2:
printf("请写出成员的位置:");
scanf("%d",&i);
printf("请输入学生姓名:");
scanf("%s",&name);
printf("请输入学生分数:");
scanf("%d",&score);
h->InsertList(h,i,name,score,&n);
printf("表中成员为:\n");
h->PrinfListNode(h);
break;
case 3:
printf("请写出成员的位置:");
scanf("%d",&i);
h->DeleteList(h,i,&n);
cout<<"表中成员为:\n";
h->PrinfListNode(h);
break;
case 4:
printf("表中成员为:\n");
h->PrinfListNode(h);
break;
case 5:
printf("请输入另一个表中成员的个数:\n");
scanf("%d",&n);
k=k->CreateNode(n);
h=h->operator +=(k);
printf("两个链表相加之后的链表是:\n");
h->PrinfListNode(h);
break;
case 6:
h=h->Unique(h,&n);
printf("剔除重复元素后的新链表是:\n");
h->PrinfListNode(h);
break;
case 0:
return 0;
break;
default:
printf("出错啦!请重试!");
}
}
return 0;
}
void DisplayNote(void)
{
printf("1--建立新的链表\n");
printf("2--添加元素\n");
printf("3--删除元素\n");
printf("4--输出当前链表中的内容\n");
printf("5--两个链表对象合并\n");
printf("6--剔除链表中重复元素\n");
printf("0--退出\n");
}

Ⅳ 学生成绩管理系统 设计说明的一些问题

void find(struct student *arr) /*定义查找函数*/
{
int j;(局部变量,用于后面循环比较)
char name[9]; /*用于接收用户输入的学生姓名*/(字符串数组,接收姓名)
char number[10]; /*用于接收用户输入的学生学号*/(字符串数组,接收学号)
system("cls"); /*清屏函数*/(清屏,开始)
printf("\n请输入要查找的学生资料:\n");
printf("\n学生姓名:");
scanf("%s",name);(输入姓名)
printf("\n学生学号:");
scanf("%s",number);(输入学号)
for(j=0;j<count;j++) /*使用字符串比较函数查找兵书出符合条件的学生成绩*/
{
if((strcmp(name,arr[j].name)==0)&&(strcmp(number,arr[j].number)==0))
{
printf("\n\t姓名\t学号\t性别\t数学\t英语\t总分\n");
printf("\t%-6s\t%-4s\t%-4s\t%-6.1f\t%-6.1f\t%-6.1f\n",
arr[j].name,arr[j].number,arr[j].sex,arr[j].math,arr[j].english,arr[j].math+arr[j].english);
break;
}
}
if(j>=count) /*如果没找到,会从循环条件退出*/
printf("\n未找到该学生纪录,请核对后重新查找!\n");
fflush(stdin); /*清空输入缓冲区*/
printf("\n回车键返回上一功能菜单\n");
getchar();
}
后面的这个是一个顺序查找的方法,用FOR循环来实现,通过strcmp这个字符串比较函数逐步比较姓名和学号,从1到count,这个count应该是前面定义的输入的学生的总人数。

Ⅵ 跪求学生成绩管理系统源代码及详细的设计过程和截图

我要是最加,我就告诉你.

Ⅶ 学生成绩管理系统有什么设计原则

#包括
包括
结构学生{
诠释身份证;
字符名称[10];
诠释年龄
>字符性[10];
字符张谷[20];
整数分殊;
字符专业户[50];
} ST [50];
我= 0;
无效淑如(){
烧焦了;
做{
printf的(“\ n请输入学号:”);
scanf函数( “%d”,&ST [i]的ID);
fflush(stdin)中;
printf的(“\ n请输入你的名字:”);
获取(ST [I]名);
printf的(“\ n”);
printf的(“请输入年龄:”);
scanf的(“为%d”,&ST [i]的年龄); printf(“请\ n请输入性别:”);
得到(ST [I]。性);

fflush(stdin)中
fflush(stdin)中;
printf的(“\ n请输入院系:”);
得到(ST [I]。张谷);
printf的(“\ n请输入成绩:”);
scanf的(“%D”,ST [I]。分殊);
fflush(stdin)中;
printf的(“\ n请输入一个专业:);
获得(ST [I]。专业户);
printf的(“\ n是否继续输入学生信息?(Y / N)”);
fflush(stdin)中;
= getchar函数();
+ +;
}(A =='Y'&& <= 50);

}

BR />无效仙师()
年龄{
诠释;
printf的(“\ t学号\ t姓名\ t \ t性别\ t学院\ T专业\ T分数的\ n“);
为(J = 0; <; + +)
printf的(”\ t%D \ T%S \ T%D \ T%S \ t%的小号\ t%d \ t其中%s \ n“,
ST [J]。身份证,ST [J]。名称,ST [J]。年龄,ST [J]。性别,ST张谷[J]。 ,ST [J]。分殊,ST [J]。专业户);
}

无效叉着()
{
INT M
字符名称[20],B;

{
printf的(“\ n请输入要发现学生的姓名:”);
fflush(stdin)中;
获取(名称);
为(M = 0,M <I,M + +)
{
(STRCMP(名,ST [M]。名)== 0)
{
printf的(“\ n \你在位置%d的学生发现!!\ n”;,M +1); BR />打破;
}
}
(M> = 20)
printf的(“\ n \ t没有找到这个学生!\ n”); />其他
{
printf的(“学生编号性别年龄教师专业成绩”);
printf的(“\ t%D \ T%S \ T%D \ T%\吨%S \ T%d \ t其中%s \ n“,
ST [M]。身份证,ST [M]。名称,ST [M]。年龄,ST [M]。性别,ST [M]。张谷,ST [M]。分殊,ST [M]。专业户);
}
printf的(“\ n能否找到另一种是学生吗?(Y / N)”);
> fflush(stdin)中
B = getchar函数();

}而(B =='Y');

}
a>
无效闪出()
{
字符名称[20],C;
整数A,B;

{
输出(“\ n请输入你要删除的学生姓名:\ n”);
fflush(stdin)中
获取(名称);
(A = 0; <我一个+ +)
{
(STRCMP(名称,ST [A]。名)== 0)
打破;
}
/ a>(B = A,B <I,B + +)
ST [B] = ST [+1];
(A>;我)
printf的(“ \ T没有找到这名学生!!\ n“);

其他
{
-
仙师();
} BR />
printf的(“\ n是否继续删除另一名学生的信息?(Y / N)”);
fflush(stdin)中;
C = getchar函数(); BR />},而(C =='Y');

}

无效charu()

淑如( );

}

廉政的main()
{
诠释改变;
做{
系统(“CLS”);
printf的(“========================的====学生信息管理系统==== =============================== \ n“);
printf的(”\ t \ t:输入学生信息\ n“);
printf的(”\ t \ t:学生信息\ n“);
printf的(”
\ t \ t:查找学生信息\ n“);的printf (“\ t \ t:删除学生信息\ n”);
printf的(“\ t \ t五:插入学生信息\ n”);
printf的(“\ t \ t VI:退出程序\ n“);
fflush(stdin)中;
printf的(”\ t \ t请输入选项:);
scanf的(“%d”,&的变化);切换(改变)

{
案件1:
淑如();突破;
案例2:
仙师()突破;
案例3:
的叉着();突破;
情况4:
闪出();突破;
情况下,5:
charu();休息;
案例6:
突破;

}

}(change! = 6);
系统(“暂停”);
返回0;
}

,正如约瑟夫链表是相对简单的,你拿去做可以做到这一点。

Ⅷ 算法结构学生信息管理系统的详细设计怎么写

你要用什么语言写啊?毕业设计啊?还是作业?

Ⅸ 学生成绩管理系统的设计与实现

给一个我以前写过的吧,功能应该差不多#include #include #include #include #include #include #include #include #include using namespace std;/*定义学生结构体*/struct Student{ char ID[20]; char Name[20]; float Mark1; float Mark2; float Mark3; float Average;};/*声明学生数组及学生数量*/struct Student students[1000];int num=0; /*求平均值*/float Avg(struct Student stu){ return (stu.Mark1+stu.Mark2+stu.Mark3)/3;} /*通过学号返回数组下标*/int Student_SearchByIndex(char id[]){ int i; for (i=0;i

Ⅹ 学生学籍管理系统详细设计说明书

学籍管理系统软件需求分析nbsp;________________________________________nbsp;编著nbsp;于博海、王利森、王艳梅、李岩、吕靖nbsp;1nbsp;引言nbsp;信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的各个领域。计算机虽然与人类的关系愈来愈密切,还有人由于计算机操作不方便继续用手工劳动。为了适应现代社会人们高度强烈的时间观念,学籍管理系统软件为教学办公室带来了极大的方便。该软件是以汉语编程语言为实现语言,其功能在系统内部有源代码直接完成。通过操作手册,使用者可以了解本软件的基本工作原理。操作人员只需输入一些简单的汉字、数字,即可达到自己的目标。nbsp;1.1nbsp;编写目的nbsp;本需求的编写目的在于研究学籍管理系统软件的开发途径和应用方法。nbsp;本需求的预期读者是与学籍管理系统软件开发有联系的决策人,开发组成人员,扶助开发者,支持本项目的领导和公司人员,软件验证者。nbsp;1.2nbsp;背景及范围nbsp;本项目的名称:学籍管理系统开发软件。nbsp;本项目的任务提出者及开发者是学籍管理系统软件开发小组,用户是教学办公室。nbsp;本产品能具体化、合理化的管理学生的学籍档案,用结构化的思维方式去了解计算机的基本工作原理和汉语程序设计语言。nbsp;1.3nbsp;定义nbsp;缩写词nbsp;略语nbsp;汉语程序设计语言:它是由北京元易达科技发展有限责任公司完全自主开发,完全自主版权的计算机语言,以汉语字词为结构,最大限度的利用汉语本身的特点,是一种基于汉语基础的通用的计算机的程序设计语言。nbsp;学籍管理系统:nbsp;学籍管理是帮助教学人员、行政人员对人事档案的管理软件。使用汉语编程语言,独立完成其功能。nbsp;1.4nbsp;参考资料nbsp;amp;lt;amp;lt;汉语程序设计语言amp;gt;amp;gt;nbsp;--------沈志斌nbsp;编著nbsp;电子工业出版社nbsp;amp;lt;amp;lt;软件工程amp;gt;amp;gt;nbsp;--------王利福nbsp;张世琨nbsp;朱冰nbsp;编著nbsp;北京大学出版社nbsp;amp;lt;amp;lt;数据库原理及应用amp;gt;amp;gt;nbsp;--------李绍原nbsp;主编nbsp;科学出版社nbsp;2nbsp;项目概述nbsp;该学籍管理系统软件目前已有比较完善的管理与使用功能,并且是计算机行业中用汉语编程来完成的新软件成员。研制学籍管理系统软件是为了满足教学办公室对学生档案管理的方便,以现代化的创新思维模式去工作。nbsp;2.1nbsp;目标nbsp;2.1.1nbsp;开发意图nbsp;a.nbsp;为了学籍管理系统更完善;nbsp;b.nbsp;为了教学办公室对学生档案的管理更方便;nbsp;c.nbsp;为了减轻行政人员的工作负担。nbsp;2.1.2nbsp;应用目标nbsp;通过本系统软件,能帮助教研人员利用计算机,快速方便的对学生学籍管理进行管理、输入、输出、查找的所需操作,使散乱的人事档案能够具体化,直观化、合理化。nbsp;2.1.3nbsp;作用及范围nbsp;本软件适用于教育界,它是比较完善的系统管理软件,对学生的学籍可以随时输入、输出、查找。nbsp;2.1.4nbsp;背景nbsp;现今学籍管理的繁索给具有强烈时间观念的行政人员带来了诸多不便,教学办公室缺少一种完善的学籍管理软件,为了对学生档案的管理方便,因此开发了本软件。nbsp;2.2nbsp;产品描述nbsp;本产品是一种依赖于汉语编程为基础的系统软件,它是以汉语编程系统词为基础,用汉语程序设计语言进行编程的产品。nbsp;2.3nbsp;产品功能nbsp;2.3.1nbsp;外部功能nbsp;学籍管理系统软件具有输入、输出、查找功能。nbsp;2.3.2nbsp;内部功能nbsp;该软件集命令、编程、编辑于一体,完成过滤、定位显示。nbsp;2.3.3nbsp;功能表nbsp;2.3.4nbsp;功能描述图nbsp;2.3.5nbsp;用户特点nbsp;本软件的使用对象是教学办公室工作人员。会汉语、懂计算机的基本操作就可以利用该软件进行所需操作。同时也会对汉语编程有认识。nbsp;2.4nbsp;一般约束nbsp;a.nbsp;本项目的开发经费不超过1万元;nbsp;b.nbsp;辅导老师2人,开发人员6人;nbsp;c.nbsp;在管理方针,硬件的限制,并行操作安全和保密方面无约束。nbsp;2.5nbsp;假设和依据nbsp;假设开发经费不到位,管理不完善,设计时没能用全得到考虑,本项目的开发都将受到很大的影响。nbsp;3nbsp;具体需求nbsp;3.1nbsp;功能需求(一)nbsp;3.1.1nbsp;规格说明nbsp;输入每个人的具体信息nbsp;3.1.2nbsp;引言nbsp;为了把个人信息(包括:学号、姓名、性别、年级、班级、系别、专业、户口所在地、家庭住址、联系电话、户口分类、考前学历、现今学历、出生日期、民族、政治面貌、身份证号、文考准

热点内容
武汉大学学生会辅导员寄语 发布: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