c语言课程设计题目::简单学生成绩统计软件 实现任务:(1)每个学生记录中包含学号、姓名和C 语言课设成

设计内容:1.学生记录应该包括学号、姓名、C语言课设成绩等信息,是本程序的核心数据结构,定义如下:typedefstruct{charnum[11];/*学号*/char... 设计内容:
1. 学生记录应该包括学号、姓名、C 语言课设成绩等信息,是本程序的核心数据结构,定
义如下:
typedef struct
{
char num[11]; /*学号*/
char name[10]; /*姓名*/
int cgrade; /*c 语言课设成绩*/
}elemtype ;
使用链表实现学生记录的存储,链表中的结点结构如下:
typedef struct node
{ elemtype data;
struct node * next;
} NODE,*Nodeptr;
int n=0;
2.程序应具有以下基本功能:
(1)以菜单形式显示主界面,提示用户进行选择,完成相应任务,如图1-1 所示。
(2)创建学生记录链表:从键盘输入一定数量的学生记录。
(3)插入学生记录:从键盘输入待插入的学生记录,插入到指定位置。
(4)对学生记录中的C 语言课设成绩按指定顺序(升序、降序)进行排序;
(5)删除学生记录:在指定位置上删除学生记录。
(6)能统计各分数段的人数,并以分布图显示,如图1-2 所示。
(7)输出学生记录到屏幕。
设计要求:
1.核心数据结构用到的结构体要采用动态内存分配和链表结构。
2.使用文件进行存储和管理。程序启动时可从文件中读取学生成绩信息,
或从键盘输入学生成绩信息;运行过程中如添加或删除记录时也可对文件进
行存取;退出前可根据需要提醒是否保存学生成绩信息到文件中。
3.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用
接口要注释清楚。对程序其它部分也进行必要的注释。
4.对系统进行功能模块分析、画出总流程图和各模块流程图。
5.用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能
可以反复使用,最好使用菜单。
6.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。
7.所有程序需调试通过。
展开
 我来答
xwtlyss126
2012-09-27 · 超过12用户采纳过TA的回答
知道答主
回答量:39
采纳率:100%
帮助的人:20万
展开全部
发了一份到你邮箱,不知你还需不需要
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-24
展开全部
已经发到你的邮箱那个去了!!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Only釗
2011-03-21 · TA获得超过232个赞
知道小有建树答主
回答量:130
采纳率:0%
帮助的人:37.6万
展开全部
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Stdent
{
char name[20];
int score;
struct Stdent *next;
}M;
void show()
{
printf("+++++++++++学生管理系统++++++++++\n");
printf("+ 杨 1.添加学生信息 1 +\n");
printf("+ 昌 2.删除学生信息 0 +\n");
printf("+ 钊 3.修改学生信息 0 +\n");
printf("+ 4.显示所有学生信息 0 +\n");
printf("+ 软 5.查找学生 3 +\n");
printf("+ 嵌 6.总分 班 +\n");
printf("+ 入 7.平均分 +\n");
printf("+ 入 8.未及格名单 +\n");
printf("+ 0:退出系统 +\n");
printf("+++欢迎+++++++++++++++++++使用+++\n");

}
int pass()
{
char ch1[100],ch2[100];
printf("+++++++++++++++++++++\n");
printf("用户名:");
gets(ch1);
printf("密码:");
gets(ch2);
printf("+++++++++++++++++++++\n");
if (strcmp(ch1,"yang")==0&&strcmp(ch2,"123")==0)
{
printf("普通用户模式。\n");
return 1;
}
else if(strcmp(ch1,"yang")==0&&strcmp(ch2,"321")==0)
{
printf("VIP用户模式。\n");
return -1;
}
else
{
return 0;
}

}
M *add(M *fptr)
{
M *ptr=NULL,*nptr=NULL;
if (fptr==NULL)
{

fptr=(M*)malloc(sizeof(M));
fptr->next=NULL;
ptr=fptr;
while(1)
{
if (getch()=='#')
{
break;
}
getchar();
nptr=(M*)malloc(sizeof(M));
nptr->next=NULL;
ptr->next=nptr;
ptr=nptr;
printf("*****************\n");
printf("请输入名字:");
scanf("%s",&ptr->name);
printf("请输入分数:");
scanf("%d",&ptr->score);
printf("***退出请输入#***\n");

}
save(fptr);
}
else
{
ptr=fptr;
while(ptr->next!=NULL)
{
ptr=ptr->next;
}
while(1)
{
if (getch()=='#')
{
break;
}
getchar();
nptr=(M*)malloc(sizeof(M));
nptr->next=NULL;
ptr->next=nptr;
ptr=nptr;
printf("*****************\n");
printf("请输入名字:");
scanf("%s",&ptr->name);
printf("请输入年龄:");
scanf("%d",&ptr->score);
printf("***退出请输入#***\n");
}
save(fptr);
}

return fptr;
}
void print(M *fptr)
{
M *ptr;
ptr=fptr->next;
while(ptr!=NULL)
{
printf("\t名字\t分数\n");
printf("\t%s\t%d\n",ptr->name,ptr->score);
ptr=ptr->next;
}
}
void del(M *fptr)
{
M *ptr,*bptr;
int flag=0;
char name1[20];
if (fptr->next==NULL)
{}
else
{
getchar();
printf("请输入要删除人的姓名:");
gets(name1);
ptr=fptr;
while(ptr!=NULL)
{
bptr=ptr;
ptr=ptr->next;
if (strcmp(ptr->name,name1)==0)
{
bptr->next=ptr->next;
free(ptr);
break;
flag=1;
}

}
save(fptr);
}
}
void All(M *fptr)
{
M *ptr;
int all=0;
ptr=fptr->next;
while(ptr!=NULL)
{
ptr=ptr->next;
all++;
}
printf("目前总人数为:%d\n",all);
}
void cha(M *fptr)
{
M *ptr;
char name2[20];
int flag=0;
getchar();
printf("请输入姓名:");
gets(name2);
ptr=fptr->next;
while(ptr!=NULL)
{
if (strcmp(ptr->name,name2)==0)
{
printf("\t名字\t分数\n");
printf("\t%s\t%d\n",ptr->name,ptr->score);
flag=1;
break;
}
ptr=ptr->next;

}
if (flag==0)
{
printf("没找到该人.\n");
}
}
void xiu(M *fptr)
{
M *ptr;
char name3[20];
int flag=0,n;
if (fptr->next==NULL)
{}
else
{
getchar();
printf("请输入姓名:");
gets(name3);
ptr=fptr->next;
while(ptr!=NULL)
{
if (strcmp(ptr->name,name3)==0)
{
printf("1.修改姓名\n2.修改分数.\n");
printf("请输入选项:");
scanf("%d",&n);
getchar();
switch(n)
{
case 1:printf("请输入修改后的名字:");
gets(ptr->name);
break;
case 2:printf("请输入修改后的分数:");
scanf("%d",&ptr->next);
break;
}
flag=1;
break;
}
ptr=ptr->next;

}
if (flag==0)
{
printf("没找到该人.\n");
}
}

}
int save(M *fptr)
{
FILE *fp;
M *ptr;
fp=fopen("D://S.txt","wt");
ptr=fptr;
while(ptr!=NULL)
{
fwrite (ptr,sizeof (M),1,fp);
ptr=ptr->next;
}
printf("保存成功\n");
fclose(fp);
return 0;
}
M* load()
{

FILE *fp;

M *head=NULL,*pnew=NULL,*pold=NULL;

if ((fp=fopen ("D://S.txt","rt"))==NULL)
{
printf ("读取时,文件打开失败!系统自动创建!\n");
return NULL;
}

head=pnew=(M*)malloc (sizeof (M));

while (!feof (fp))
{
if (fread(pnew,sizeof (M),1,fp)!=1)
break;
pnew->next =(M*)malloc (sizeof (M));
pold=pnew;
pnew=pnew->next;
}
pold->next=NULL;
fclose (fp);
printf ("\n\n读取完毕!\n\n");
return head;

}
M* load2()
{

FILE *fp;

M *head=NULL,*pnew=NULL,*pold=NULL;

if ((fp=fopen ("D://S.txt","rt"))==NULL)
{
printf ("读取时,文件打开失败!系统自动创建!\n");
return NULL;
}

head=pnew=(M*)malloc (sizeof (M));

while (!feof (fp))
{
if (fread(pnew,sizeof (M),1,fp)!=1)
break;
pnew->next =(M*)malloc (sizeof (M));
pold=pnew;
pnew=pnew->next;
}
pold->next=NULL;
fclose (fp);
return head;

}

void show2()
{
printf("1.按姓名查找\n2.按分数查找\n");
}

void cha1(M *fptr)
{
M *ptr;
char name2[20];
int flag=0;
getchar();
printf("请输入名字:");
gets(name2);
ptr=fptr->next;
printf("\t名字\t分数\n");
while(ptr!=NULL)
{
if (strcmp(ptr->name,name2)==0)
{

printf("\t%s\t%d\n",ptr->name,ptr->score);
flag=1;
break;
}
ptr=ptr->next;

}
if (flag==0)
{
printf("没找到该人.\n");
}
}

void cha2(M *fptr)
{
M *ptr;
int name2;
int flag=0;
getchar();
printf("请输入分数:");
scanf("%d",&name2);
ptr=fptr->next;
printf("\t名字\t分数\n");
while(ptr!=NULL)
{
if (name2==ptr->score)
{

printf("\t%s\t%d\n",ptr->name,ptr->score);
flag=1;
break;
}
ptr=ptr->next;

}
if (flag==0)
{
printf("没找到该人.\n");
}
}

void show3()
{
printf("1.普通显示\n2.按名字显示\n3.按分数显示\n");
}

void print2(M *fptr)
{
M *ptr;
char ch[20];
ptr=fptr->next;
getchar();
printf("请输入名字:");
gets(ch);
printf("\t名字\t分数\n");
while(ptr!=NULL)
{

if (strcmp(ptr->name,ch)==0)
{
printf("\t%s\t%d\n",ptr->name,ptr->score);
}

ptr=ptr->next;
}
ptr=fptr->next;
while(ptr!=NULL)
{

if (strcmp(ptr->name,ch)!=0)
{
printf("\t%s\t%d\n",ptr->name,ptr->score);
}

ptr=ptr->next;
}
}
void print3(M *fptr)
{
M *ptr,*q;
ptr=fptr->next;
q=ptr;
while (q!=NULL)
{
ptr=q;
while(ptr->next!=NULL)
{

if (ptr->next->score > q->score)
{
int temp=0;
char t[20];
temp=ptr->next->score;
ptr->next->score=q->score;
q->score=temp;
strcpy(t,ptr->next->name);
strcpy(ptr->next->name,q->name);
strcpy(q->name,t);
}
ptr=ptr->next;
}
q=q->next;
}
ptr=fptr->next;
printf("\t名字\t分数\n");
while (ptr!=NULL)
{
printf("\t%s\t%d\n",ptr->name,ptr->score);
ptr=ptr->next;
}

}

int Allscore(M *fptr)
{
M *ptr;
int temp=0;
ptr=fptr->next;
while(ptr!=NULL)
{
temp+=ptr->score;
ptr=ptr->next;
}
return temp;
}

double Av(M *fptr)
{
M *ptr;
int temp=0,i=0;
ptr=fptr->next;
while(ptr!=NULL)
{
temp+=ptr->score;
ptr=ptr->next;
++i;
}
return temp/i;

}

void fals(M *fptr)
{
M *ptr;
ptr=fptr->next;
while(ptr!=NULL)
{
printf("\t名字\t分数\n");
if (ptr->score < 60)
{
printf("\t%s\t%d\n",ptr->name,ptr->score);
}
else
{
printf("没有找到不及格学生\n");
}
ptr=ptr->next;
}
}

main()
{
int n,pa,n2,n3,zong;
double av;
M *fptr=NULL;
FILE fp;
pa=pass();

if(pa==-1)
{
fptr=load();
show();
if(fptr!=NULL)
{All(fptr);}
while(1)
{
printf("请输入选项:");
scanf("%d",&n);
switch(n)
{
case 1:fptr=add(fptr);
All(fptr);
break;
case 2:if (fptr->next==NULL)
{
printf("出错了未添加人员……\n");
}
del(fptr);
All(fptr);
break;
case 3:if (fptr->next==NULL)
{
printf("出错了未添加人员……\n");
}
xiu(fptr);
break;
case 4:if (fptr->next==NULL)
{
printf("出错了未添加人员……\n");

}
show3();
printf("请输入选项:");
scanf("%d",&n3);
switch(n3)
{
case 1:print(fptr);
break;
case 2:print2(fptr);
break;
case 3:print3(fptr);
fptr=load2();
break;
}
break;
case 5:if (fptr->next==NULL)
{
printf("出错了未添加人员……\n");

}
show2();
printf("请输入选项:");
scanf("%d",&n2);
switch(n2)
{
case 1:cha1(fptr);
break;
case 2:cha2(fptr);
break;
}
break;
case 6:if (fptr->next==NULL)
{
printf("出错了未添加人员……\n");

}
zong=Allscore(fptr);
printf("总分:%d\n",zong);
break;
case 7:if (fptr->next==NULL)
{
printf("出错了未添加人员……\n");

}
av=Av(fptr);
printf("平均分:%lf\n",av);
break;
case 8:
if (fptr->next==NULL)
{
printf("出错了未添加人员……\n");
}
fals(fptr);
break;
case 0:exit(0);
break;
default:printf("没有这个选项!!!!!\n");
}
}

}
else if (pa==1)
{
fptr=load();
show();
if(fptr!=NULL)
{All(fptr);}
while(1)
{
printf("请输入选项:");
scanf("%d",&n);
switch(n)
{
case 1:printf("抱歉您没有权限。\n");
break;
case 2:printf("抱歉您没有权限。\n");
break;
case 3:printf("抱歉您没有权限。\n");
break;
case 4:if (fptr->next==NULL)
{
printf("出错了未添加人员……\n");

}
show3();
printf("请输入选项:");
scanf("%d",&n3);
switch(n3)
{
case 1:print(fptr);
break;
case 2:print2(fptr);
break;
case 3:print3(fptr);
break;
}
break;
case 5:if (fptr->next==NULL)
{
printf("出错了未添加人员……\n");

}
show2();
printf("请输入选项:");
scanf("%d",&n2);
switch(n2)
{
case 1:cha1(fptr);
break;
case 2:cha2(fptr);
break;
}
break;
case 6:if (fptr->next==NULL)
{
printf("出错了未添加人员……\n");

}
zong=Allscore(fptr);
printf("总分:%d\n",zong);
break;
case 7:if (fptr->next==NULL)
{
printf("出错了未添加人员……\n");

}
av=Av(fptr);
printf("平均分:%lf\n",av);
break;
case 8:if (fptr->next==NULL)
{
printf("出错了未添加人员……\n");
}
fals(fptr);
break;
case 0:exit(0);
break;
default:printf("没有这个选项!!!!!\n");
}
}
}
else
{
printf("密码输入错误.\n");
exit(0);
}
}

你参考下吧……这用链表做的……功能基本都有了……
追问
对不起,你的答案不符合题目的要求
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式