学生信息管理系统C语言编程.docx
- 文档编号:1966126
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:14
- 大小:17.87KB
学生信息管理系统C语言编程.docx
《学生信息管理系统C语言编程.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统C语言编程.docx(14页珍藏版)》请在冰豆网上搜索。
学生信息管理系统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的学生
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 信息管理 系统 语言 编程