学生选课情况管理系统
- 格式:pdf
- 大小:226.79 KB
- 文档页数:29
南京邮电大学程序设计报告(2009/2010学年 第二学期)题 目:学生选课情况管理系统专 业 电子科学与技术 学 生 姓 名 张若鹏 班 级 学 号 B09020315 指 导 教 师 金仙力 指 导 单 位 计算机软件教学中心 日 期 2010年 3月 17日评分项 优秀 良好 中等 差 遵守机房规章制度 上机时的表现 学习态度 程序准备情况 程序设计能力 团队合作精神 课题功能实现情况 算法设计合理性 用户界面设计 报告书写认真程度 内容详实程度 文字表达熟练程度 评 分 细 则回答问题准确度简 短 评 语 教师签名:年 月 日评分等级备注评分等级有五种:优秀、良好、中等、及格、不及格学生选课情况管理系统一:课题内容和要求【问题描述】用C 语言实现一个学生选课情况管理系统。
该系统要求对一个文件中所存储的学生选课数据进行各种常规操作,如:录入、查找、统计、分析、显示等功能。
通过此课题,熟练掌握文件、数组的各种操作,以及一些算法思想的应用,实现一个简单的学生选课管理系统。
【功能描述】该系统应实现以下功能(1)选课信息录入:允许逐条录入学生选课信息(包括:学号、姓名、课程号、课程名、学分数),存入数据文件SC.dat 中。
(2)选课情况查询:允许查看所有学生的选课信息,包括:学号、姓名、课程号、课程名、学分数; 也可以按学号查看某个学生的选课信息。
(3)选课人数统计查询:按课程统计各门课程的选课人数。
(4)统计每位学生选修的学分数。
(5)最少、最多查询:查询学分最少、最多的学生的学号、姓名。
(6)分析学生的学分数是否达标:本学期学生应选的学分数是20,判断每位学生的学分数是否达标,记录状态,计算未达标的学生比例,超标学生比例。
二、需求分析功能架构图: 见(图2-1)选课情况查询学生选课情况管理系统选课人数统计查统计每位学生选修学分最少、最多查询分析学生的学分数是否达标全体学个别学1)录入系统:用于选课系统的录入。
2)查询功能:用于选课情况查询。
可分别用于全体学生查询和个别学生查询。
3)统计功能:可分别统计每个课程的选课人数。
亦要统计每位学生的选修学分。
4)分析功能:分析出最多学分和最少学分的学生。
分析每个学生的达标情况。
三、概要设计(1) 主要结构体:struct Student //学生选课情况结构{char StudentID[20]; //学号char StudentName[20]; //姓名char CourseNum[20]; //课程号char CourseName[30]; //课程名int score; //学分};struct Statictis //学分统计结构{char student_id[20]; //学号char student_name[20]; //姓名int all_score; //本学生总学分};(2) 主要函数流程图一,录入信息函数:用于逐条录入学生的选课信息,并创建二进制SC.dat文件保存信息。
(见图3-1)二,创建学分统计文件的函数:从SC.dat文件中读取选课信息,分析每个学生选课的总学分,并保存到新创建的statistics.dat文件中。
(见图3-2)三,全体学生选课查询函数:从SC.dat文件中读取选课信息,并逐条打印出来的函数。
详见(图3-3)。
四,个别学生选课情况查询函数:从SC.dat文件中读取选课信息,根据用户输入的学号寻找某个学生的选课情况并打印出来的函数。
(见图3-4)五,选课人数统计函数:从SC.dat文件中读取选课信息,逐条读取每个学生的选课的课程号并根据此统计出每门课程的选课人数。
(见图3-5)六,学分统计函数:从statistics.dat文件中读取各个学生总学分的统计情况,病逐条打印出来的函数。
(见3-6)七,最多,最少查询函数:从statistics.dat文件中读取每个学生的总学分。
并逐个比较。
得到总学分最多和总学分最少的学生信息并打印出来的函数。
八,学分分析函数:从statistics.dat文件中读取学生学分信息。
并依照标准分析学生的选课达标情况,统计达标,超标,未达标人数,计算比例,打印结果的函数。
(见3-8)四、详细设计#include<stdio.h>#include<stdlib.h>#include<string.h>struct Student //学生选课情况结构{char StudentID[20]; //学号char StudentName[20]; //姓名char CourseNum[20]; //课程号char CourseName[30]; //课程名int score; //学分};struct Statictis //学分统计结构{char student_id[20]; //学号char student_name[20]; //姓名int all_score; //本学生总学分};typedef struct Student Stu;typedef struct Statictis Stat;void MainMenu(void); //菜单函数void SwitchMenu(void); //菜单选择函数void GoOn(void); //询问继续操作函数void CreateFileSC(void); //信息录入及创造SC.dat文件函数void CreateFileStatistic(void); //创造statistic.dat文件函数void SearchAll(void); //查看全体成员的函数void SearchOne(void); //查看个别成员的函数void CountCourse(void); //统计课程选课人数的函数void CountAllscore(void); //统计每个学生总学分的函数void Min_and_Max(void); //最多最少学分查询函数void AnalyseScore(void); //分析达标情况函数int main() //主函数{MainMenu();SwitchMenu();return 0;}void SwitchMenu(void) //菜单选择函数{int choice;printf("→请输入你要操作的数字选项:");scanf("%d",&choice);switch(choice){case 1:CreateFileSC();GoOn();MainMenu();SwitchMenu();break;case 2:SearchAll();GoOn();MainMenu();SwitchMenu();break;case 3:SearchOne();GoOn();MainMenu();SwitchMenu();break;case 4:CountCourse();GoOn();MainMenu();SwitchMenu();break;case 5:CountAllscore();GoOn();MainMenu();SwitchMenu();break;case 6:Min_and_Max();GoOn();MainMenu();SwitchMenu();break;case 7:AnalyseScore();GoOn();MainMenu();SwitchMenu();break;case 0:break;default:printf("!!!输入有误,请重输\n");SwitchMenu();}}void MainMenu(void) //菜单函数{printf("┌────────────────────────┐\n");printf("│ ★ 欢迎进入学生选课系统 ★ │\n");printf("│*********************************************** │\n");printf("│ │\n");printf("│ ◆<1>.选课课信息录入 │\n");printf("│ ◆<2>.全体学生选课情况查询 │\n");printf("│ ◆<3>.个别学生选课情况查询 │\n");printf("│ ◆<4>.选课人数统计 │\n");printf("│ ◆<5>.学分统计 │\n");printf("│ ◆<6>.最多、最少查询 │\n");printf("│ ◆<7>.达标状况分析 │\n");printf("│ ◆<0>.退出 │\n");printf("│ │\n");printf("│ │\n");printf("└────────────────────────┘\n"); }void GoOn(void) //询问继续操作函数{char choice=0;printf("是否继续操作(y/n)?:");getchar();choice=getchar();if(choice=='n'||choice=='N')exit(1);}void CreateFileSC(void) //信息录入及创造SC.dat文件函数{int i;int n;Stu *s; //定义Student型结构变量sFILE *fp;fp=fopen(".\\SC.dat","wb+"); //用文件指针读写文件if(fp==NULL){printf("!!!文件无法打开\n");exit(1);}printf("→请输入学生选课信息。
\n");printf("→请你输入你想录入的学生信息数:");scanf("%d",&n);s=(Stu *)malloc(n*sizeof(Stu));if(s==NULL){printf("!!!内存申请失败\n");exit(1);}for(i=0;i<n;i++){printf("→请输入第%d条学生的信息\n",i+1);printf("学号:");getchar();gets(s[i].StudentID);printf("姓名:");gets(s[i].StudentName);printf("课程号:");gets(s[i].CourseNum);printf("课程名:");gets(s[i].CourseName);printf("学分:");scanf("%d",&s[i].score);fwrite(&s[i],sizeof(Stu),1,fp); //将信息写入文件中}printf("操作完成。