最新学生信息管理系统C语言编程.docx
《最新学生信息管理系统C语言编程.docx》由会员分享,可在线阅读,更多相关《最新学生信息管理系统C语言编程.docx(17页珍藏版)》请在冰豆网上搜索。
最新学生信息管理系统C语言编程
学生信息管理系统C语言编程
【问题描述】
学生信息的管理是每个学校必须具有的管理功能,主要是对学生的基本情况及学习成绩等方面的管理。
该系统模拟一个简单的学生管理系统,要求对文件中所存储的学生数据进行各种常规操作,如:
排序、查找、计算、显示等功能。
通过此课题,熟练掌握文件、数组、结构体的各种操作,在程序设计中体现一定的算法思想,实现一个简单的学生信息管理系统。
【基本要求】
(1)学生信息包括:
学生基本信息文件(student.txt)(注:
该文件不需要编程录入数据,可用文本编辑工具直接生成)的内容如下:
(2)学生成绩基本信息文件(score.dat)及其内容如下:
((注:
该文件内容需要编程录入数据,具体做法见下面的要求)
学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩实得学分
(3)需要实现的功能
1)数据录入和计算功能:
对score.dat进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据,综合成绩、实得学分由程序根据条件自动运算。
综合成绩的计算:
如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%;如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70%。
实得学分的计算:
采用等级学分制,综合成绩在90-100之间,应得学分=学分*100%;综合成绩在80-90之间,应得学分=学分*80%;综合成绩在70-80之间,应得学分=学分*75%;综合成绩在60-70之间,应得学分=学分*60%;综合成绩在60以下,应得学分=学分*0%。
2)查询功能:
分为学生基本情况查询和成绩查询两种
(1)学生基本情况查询:
①、输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出,格式如下:
②、输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。
(格式如上所示)
(2)成绩查询:
①、输入一个学号时,查询出此生的所有课程情况,格式如下:
学号:
xx姓名:
xxxxx
课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx
课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx
课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx
……………………
共修:
xx科,实得总学分为:
xxx
(3)删除功能:
提供待删除学生的学号,则在student.txt和score.dat中删除所有与该学生有关的信息。
(4)排序功能:
能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
【程序设计的具体说明】
(1)将与两个文件对应的信息分别定义两种结构体类型来表示,也可以用类来定义;
(2)对score.dat文件的写入,从键盘上输入的是前七项,后两项数据项根据计算方法算出后,得到完整的结构体信息,作为一个整体写入(可调用write函数)。
(3)删除功能中可以将删除相关信息后得到的文件生成新文件存储,也可以在原文件的基础上作删除
(4)可以用面向过程方法或是面向对象的方法实现。
(5)主界面提供菜单选择的方法选择实现某一功能,一次运行程序能进行多次选择执行不同的功能。
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#defineN3
typedefstructz1
{
charno[11];
charname[15];
intscore[N];
floatsum;
floataverage;
intorder;
structz1*next;
}STUDENT;
STUDENT*init();
STUDENT*create();
STUDENT*del(STUDENT*h);
voidprint(STUDENT*h);
voidsearch1(STUDENT*h);
voidsearch2(STUDENT*h);
STUDENT*insert(STUDENT*h);
voidsort(STUDENT*h);
voidsave(STUDENT*h);
voidtongji(STUDENT*h);
intmenu_select();
STUDENT*load();
voidinputs(char*prompt,char*s,intcount);
STUDENT*load();
main()
{
inti;
STUDENT*head;
head=init();
for(;;)
{
switch(menu_select())
{
case0:
head=init();break;
case1:
head=create();break;
case2:
head=insert(head);break;
case3:
save(head);break;
case4:
print(head);break;
case5:
search1(head);break;
case6:
head=del(head);break;
case7:
sort(head);break;
case8:
tongji(head);break;
case9:
search2(head);break;
case10:
exit(0);
}
}
}
intmenu_select()
{
char*menu[]={"************菜单************",
"0.初始化链表",
"1.输入学生成绩",
"2.插入学生成绩",
"3.保存学生记录",
"4.显示学生记录",
"5.按学号查找学生信息",
"6.删除指定学号的学生信息",
"7.按某一门课对学生成绩排序",
"8.统计某门课程的学生成绩",
"9.按姓名查找学生信息",
"10.退出系统"};
chars[3];
intc,i;
for(i=0;i<=11;i++)
printf("%s\n",menu[i]);
do
{
printf("\n请选择0~10中的某一个选项\n");
scanf("%s",s);
c=atoi(s);
}while(c<0||c>10);
returnc;
}
STUDENT*init()
{
returnNULL;
}
STUDENT*create()
{
inti;ints;
STUDENT*h=NULL,*info;
for(;;)
{
info=(STUDENT*)malloc(sizeof(STUDENT));
if(!
info)
{
printf("\n内存不足");
returnNULL;
}
inputs("输入学号:
",info->no,11);
if(info->no[0]=='@')break;
inputs("输入姓名:
",info->name,15);
printf("开始输入%d门课的成绩\n",N);
s=0;
for(i=0;i{
do{
printf("第%d门分数:
",i+1);
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("输入成绩错误,请重新输入:
\n");
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i];
}
info->sum=s;
info->average=(float)s/N;
info->order=0;
info->next=h;
h=info;
}
returnh;
}
voidinputs(char*prompt,char*s,intcount)
{
charp[255];
do
{
printf(prompt);
scanf("%s",p);
if(strlen(p)>count)
printf("\n太长了!
\n");
}while(strlen(p)>count);
strcpy(s,p);
}
voidprint(STUDENT*h)
{
inti=0;
STUDENT*p;
p=h;
printf("\n\n\n***********************学生***********************\n");
printf("|序号|学号|姓名|语文|英语|数学|总分|平均分|名次|\n");
printf("|---|-------|--------|----|----|----|------|------|---|\n");
while(p!
=NULL)
{
i++;
printf("|%3d|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",i,p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("***********************end***********************\n");
}
STUDENT*del(STUDENT*h)
{
STUDENT*p,*q;
chars[11];
printf("请输入要删除的学生的学号\n");
scanf("%s",s);
q=p=h;
while(strcmp(p->no,s)&&p!
=NULL)
{
q=p;
p=p->next;
}
if(p==NULL)
printf("\n链表中没有学号为%s的学生\n",s);
else
{
printf("\n\n\n***********************找到了***********************\n");
printf("|学号|姓名|语文|英语|数学|总分|平均分|名次|\n");
printf("|----------|----------|----|----|----|------|------|---|\n");
printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("***********************end***********************\n");
printf("请按任意键删除\n");
getchar();
if(p==h)
h=p->next;
elseq->next=p->next;
free(p);
printf("\n已经删除学号为%s的学生\n",s);
printf("不要忘了保存数据\n");
}
returnh;
}
voidsearch1(STUDENT*h)
{
STUDENT*p;
chars[11];
printf("请输入你要查找的同学的学号\n");
scanf("%s",s);
p=h;
while(strcmp(p->no,s)&&p!
=NULL)
p=p->next;
if(p==NULL)
printf("'n没有学号为%s的学生\n",s);
else
{
printf("\n\n\n***********************找到了***********************\n");
printf("|学号|姓名|语文|英语|数学|总分|平均分|名次|\n");
printf("|----------|-----------|----|----|----|------|------|---|\n");
printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("***********************end***********************\n");
}
}
voidsearch2(STUDENT*h)
{
STUDENT*p;
chars[11];
printf("请输入你要查找的同学的姓名\n");
scanf("%s",s);
p=h;
while(strcmp(p->name,s)&&p!
=NULL)
p=p->next;
if(p==NULL)
printf("\n没有姓名为%s的学生\n",s);
else
{
printf("\n\n\n***********************找到了***********************\n");
printf("|学号|姓名|语文|英语|数学|总分|平均分|名次|\n");
printf("|----------|-----------|----|----|----|------|------|---|\n");
printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("***********************end***********************\n");
}
}
STUDENT*insert(STUDENT*h)
{
STUDENT*p,*q,*info;
chars[11];
ints1,i;
printf("请输入插入点的学生学号\n");
scanf("%s",s);
printf("\n请输入新的学生信息\n");
info=(STUDENT*)malloc(sizeof(STUDENT));
if(!
info)
{
printf("\n内存不足!
");
returnNULL;
}
inputs("输入学号:
",info->no,11);
inputs("输入姓名:
",info->name,15);
printf("请输入%d门课的分数\n",N);
s1=0;
for(i=0;i{
do{
printf("分数%d",i+1);
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("输入数据有误,请重新输入\n");
}while(info->score[i]>100||info->score[i]<0);
s1=s1+info->score[i];
}
info->sum=s1;
info->average=(float)s1/N;
info->order=0;
info->next=NULL;
p=h;
q=h;
while(strcmp(p->no,s)&&p!
=NULL)
{q=p;p=p->next;}
if(p==NULL)
if(p==h)
h=info;
elseq->next=info;
else
if(p==h)
{
info->next=p;
h=info;
}
else
{
info->next=p;
q->next=info;
}
printf("\n已经插入了%s这个学生\n",info->name);
printf("----不要忘了存盘啊--\n");
return(h);
}
voidsave(STUDENT*h)
{
FILE*fp;
STUDENT*p;
charoutfile[10];
printf("请输入保存文件的文件名,例如c:
\\f1\\te.txt:
\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL)
{
printf("不能打开文件\n");
exit
(1);
}
printf("\n正在保存......\n");
p=h;
while(p!
=NULL)
{
fwrite(p,sizeof(STUDENT),1,fp);
p=p->next;
}
fclose(fp);
printf("------保存成功!
!
!
------\n");
}
voidsort(STUDENT*h)
{
inti=0,j;
STUDENT*p,*q,*t,*h1;
printf("请输入要按哪门课程的编号来排序:
(0.语文1.数学2.英语)\n");
scanf("%d",&j);
h1=h->next;
h->next=NULL;
while(h1!
=NULL)
{
t=h1;
h1=h1->next;
p=h;
q=h;
while(t->score[j]score[j]&&p!
=NULL)
{
q=p;
p=p->next;
}
if(p==q)
{
t->next=p;
h=t;
}
else
{
t->next=p;
q->next=t;
}
}
p=h;
while(p!
=NULL)
{
i++;
p->order=i;
p=p->next;
}
print(h);
printf("排序成功!
!
!
\n");
}
voidtongji(STUDENT*h)
{
STUDENT*p;
inta,b,i;
printf("请输入课程编号\n");
scanf("%d",&i);
printf("请输入分数段:
\n");
(三)上海的文化对饰品市场的影响scanf("%d,%d",&a,&b);
营销环境信息收集索引p=h;
while(p!
=NULL)
1996年“碧芝自制饰品店”在迪美购物中心开张,这里地理位置十分优越,交通四通八达,由于位于市中心,汇集了来自各地的游客和时尚人群,不用担心客流量的问题。
迪美有300多家商铺,不包括柜台,现在这个商铺的位置还是比较合适的,位于中心地带,左边出口的自动扶梯直接通向地面,从正对着的旋转式楼梯阶而上就是人民广场中央,周边4、5条地下通道都交汇于此,从自家店铺门口经过的90%的顾客会因为好奇而进去看一下。
{
printf("\n\n\n***********************找到了***********************\n");
十几年的学校教育让我们大学生掌握了足够的科学文化知识,深韵的文化底子为我们创业奠定了一定的基础。
特别是在大学期间,我们学到的不单单是书本知识,假期的打工经验也帮了大忙。
if(p->score[i]>=a&&p->score[i]<=b)
{
printf("|学号|姓名|语文|英语|数学|总分|平均分|名次|\n");
上海市劳动和社会保障局所辖的“促进就业基金”,还专门为大学生创业提供担保,贷款最高上限达到5万元。
printf("|--------|---------|----|----|----|------|------|---|\n");
目前,上海市创业培训中心已开办大学生创业培训班,共招收上海交通大学、上海商业职业技术学院等应届毕业生62人。
printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
木质、石质、骨质、琉璃、藏银……一颗颗、一粒粒、一片片,都浓缩了自然之美,展现着千种风情、万种诱惑,与中国结艺的朴实形成了鲜明的对比,代表着欧洲贵族风格的饰品成了他们最大的主题。
}
一、消费者分析p=p->next;
(六)DIY手工艺品的“创作交流性”}
(1)价格低printf("***********************end***********************\n");
}