基于c语言的学分管理系统方案_第1页
基于c语言的学分管理系统方案_第2页
基于c语言的学分管理系统方案_第3页
基于c语言的学分管理系统方案_第4页
基于c语言的学分管理系统方案_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

..1引言现今大学对学生成绩管理以及学生水平评定过程中,不仅依靠学生分数,而且把各个科目的掌握情况通过学分来反映,众所周知,大学人数众多,单靠人工在纸质介质上记录,既浪费资源又不方便管理,并且错误率高,学分管理系统就是基于现今大学在学生成绩管理过程中采用学分制,应运而生的计算机数据管理系统,对在校生进行学分数据录入、修改、删除、查找、排序以及对学分得分的初步统计,并存储学生学分数据的计算机数据管理系统。利用学分管理系统可以有效的帮助管理者,来管理学生学分数据,并能够了解各个班级学生学分完成情况,从而节约了管理过程中的人力物力,并且存贮方便、准确。学生学分管理系统是运行于计算机系统下的应用软件,主要用于对学生的学号、姓名以及各项学科学分进行录入、删除、修改、查询、排序、统计、存盘等操作,为学校的教师和学生提供了一个对学生学分进行管理和查看的平台,给用户提供了一个简单友好的用户接口,主要任务如下:1.1查看所有学生信息根据菜单提示,选择该功能,能够逐条显示全部学生学分记录1.2输入学生记录用户根据菜单提示选择输入学生记录选项,进行有关学生的学号、姓名、班级、基础课学分、专业课学分、选修课学分、人文类课学分以及实验课学分的录入。可一次性输入多条学生的学分信息记录。1.3删除学生记录根据提示,用户输入要进行删除学生的学号,如果在不存在该学号,则显示没有找到该学生;如果在文件中有该学号的信息存在,则将该学号所对应的姓名、学号、班级、各科学分等在对应文件中加以删除。1.4修改学生记录根据提示,用户输入要进行修改学分记录的学生的学号,如果在文件中不存在该学号,则显示没有找到该学生;如果在文件中有该学生的信息存在,则将提示用户选择要修改的某课程,当用户选择某课程的代码后,则将显示你所要修改的课程。然后提示用户选择是否继续进行修改操作。1.5查询学生信息查询学生信息,分为根据学号查询和根据班级查询两个具体需求,菜单选项分别提示用户输入要查询学生信息的学号或班级,如果在磁盘文件中有对应的输入信息,则提示用户已找到,并逐项列出对应查找到的学生学分状况。1.6根据学号排序学生记录该项功能根据学生的学号项进行排序,以便用户对学生学分状况有较为直观方便的了解,并能够让学号有规律排列的学生项,在显示时集中出现,让浏览者更加清楚明白。1.7统计学生学分完成情况该项是统计各班学生的学分完成情况,可以很方便了解该班学生的学习水平。2总体设计进行总体设计,以比较抽象的方式概括的确定系统如何完成预定的任务,进而确定组成系统的每个子程序的结构,从而将一个大的程序按功能分割成一些模块,是每个模块具有功能单一、结构清晰、接口简单易于理解的小程序,并且确定各个函数之间的调用关系。本系统主要应用结构化的设计思想,实现学生学分的输入、删除、修改、查询以及浏览等管理功能,各主要模块的数据均存储在文件中,因此包含对文件的读、写等基本操作。在软件开发过程中应用了高级语言程序设计中的基本控制结构,如选择、循环、顺序等结构。系统的设计方法是结构化设计方法,采用C语言进行开发。系统功能结构图,如图1所示。退出系统退出系统查看所有学生信息输入学生记录删除学生记录修改学生记录根据学号查询学生记录根据班级查询学生记录根据学号排序学生记录统计学生学分完成情况学分管理程序图1系统结构图图1系统结构图3详细设计本系统采用主函数调用子函数的设计方法,先整体在逐步细化的过程,具体方法如下:在主函数前,进行子函数声明,如下:voidmenu<>;//菜单函数voidto_menu<>;//返回菜单函数voidview_data<>;//查看所有学生信息voidsave_data<>;//保存数据voidadd_data<>;//输入学生数据voidread_data<>;//读取数据voiddelete_data<>;//删除数据voidedit_data<>;//修改数据voidquery_data_no<>;//查找〔按学号voidquery_data_clas<>;//查找〔按班级voidsort_data_no<>;//排序〔学号voidtongji<>;//统计某班学生学分完成情况3.1主函数设计编写主函数,主函数运行时,先调用voidread_data<>函数,将数据从文件读取到结构体数组中,再调用菜单函数voidmenu<>,显示菜单选择项,设计一个while循环,让函数进入循环,设计switch函数,对菜单各项功能进行选择,使各项功能能够运行,最后退出循环,调用to_menu<>函数,返回主菜单。main<>{intfun;read_data<>;menu<>;while<1>{printf<"请输入功能号[0-8]:",&fun>;scanf<"%d",&fun>;switch<fun>{case0:break;//退出case1:view_data<>;break;//查看所有学生信息case2:add_data<>;break;//输入学生记录case3:delete_data<>;break;//删除学生记录case4:edit_data<>;break;//修改学生记录case5:query_data_no<>;break;//查询〔学号case6:query_data_clas<>;break;//查询〔班级case7:sort_data_no<>;break;//排序〔学号case8:tongji<>;break;//统计某班学生学分完成情况default:printf<"输入错误!">;break;}if<fun==0>break;to_menu<>;}}3.2子函数设计菜单函数设计菜单函数首先运行库函数system<"cls">进行清屏,然后运行各个printf语句,显示主菜单,如图2所示。图2系统主菜单图2系统主菜单返回主菜单函数设计设计字符c1,c2,用c1来接受第一次输入的回车,然后再次输入回车时,调用函数menu<>,返回主菜单,来实现各次操作完成后返回主菜单的任务。查看所有学生信息函数设计设计for循环,定义i=0,学生总数为dd.count,利用for循环,可以显示所有学生已经记录的信息。如图3所示:图3查看所有学生信息图3查看所有学生信息数据从结构体数组保存到文件的函数设计创建文件data.txt,利用for循环,把数据逐个写入文件。输入学生记录函数设计根据printf语句提示,逐个输入学号、姓名、班级,调用库函数strcpy<>,把各个输入项,拷贝到数组中,再对各项分数进行赋值,如果大于最大值,则显示最大值,设计成循环模式,末尾提示是否继续添加数据,利用break终止循环,最后存盘,退出程序,显示主菜单。输入学号为106的学生信息后如图4所示。图4输入学生信息图4输入学生信息删除学生记录函数设计设计for循环以及库函数strcmp<>,把输入的学号,跟已有的学号进行对比,如果没有相同的学号,则提示没有找到该学生,如果找到相同的学号,则把该学号以后的数据向前移动一位,再把学生总数减一,实现删除学生。删除过程如下图5和图6所示。图5输入要删除的学生图5输入要删除的学生图6删除后显示图6删除后显示修改学生记录函数设计根据printf语句提示,输入要修改的学生的学号,设计for循环和库函数strcmp,对输入学号进行查找,如果没有查找到,显示没有找到该学生,如果能够查找到给学生,则进一步提示输入学生的姓名、班级,然后选择要修改的学生记录项,最后提示,是否继续录入,退出后可返回主菜单。修改过程如下图7和图8所示。图7编辑学生信息窗口图7编辑学生信息窗口图8修改学生信息完成图8修改学生信息完成查询学生记录函数设计查询学生记录分为,根据学生学号查询和根据班级查询该班所有学生的成绩,设计for循环和调用ctrcmp<>函数,把要查询的结果进行显示,如果没有找到与输入匹配的字符,则显示没有找到该班级或没有找到该学生。查询显示如下图,根据学号查询如图9所示,根据班级查询如图10所示。图9根据学号查询学生信息图9根据学号查询学生信息图10根据班级查询学生信息图10根据班级查询学生信息排序函数设计设计while循环,用for循环和库函数strcmp将学号依次比较,然后用冒泡排序法将学号数据由小到大排列,并且各数据交换,完成排序。排序结果如下图11所示。图11根据学号排序结果图11根据学号排序结果3.2.10统计函数设计输入要统计的班级号,调用strcmp函数,查找相同班级号的学生数据,再设计for循环并调用strcmp函数,把差找出的学生数据,与要求完成的学分标准进行对比,统计出符合要求和不符合要求的学生个数,最后显示。统计结果如下图12所示。图12根据班级统计结果图12根据班级统计结果4总结本系统可以完成学生学分的录入、查询、修改、删除、排序以及班级总体水平的统计功能,但是对于系统的访问权限设置,访问途径〔网络访问还是单机使用等功能,还没有提出解决的方案,在这些问题上还有待于对系统的进一步开发完善。学分管理系统是介于学生管理者和学生之间的一个数据库平台,他让数据管理者可以方便的录入修改学生成绩,在管理过程中可以节省时间,增加工作效率,假如学生可以通过网络来进行查询,就可以避免学分改动而引发的矛盾,同时也可以给学生带来方便,因此在访问途径上可以设置为单机服务器管理,网络访问的数据库模式,来为学生和学校之间提供一个信息查询的平台。本系统的开发过程,主要利用了for循环、switch循环、库函数strcmp与strcpy等,在排序函数设计时,略显繁琐,有待于使用者在使用时,提出宝贵的意见和建议。通过对本程序的开发,让我了解到一个完整系统的开发过程,将一个大的工程问题可以细化到各个模块,让每个模块可以独立去完成各自的功能,最后用函数之间的调用来解决程序开发的全部问题,让我在以后开发程序的道路上更加拥有信心。参考文献[1]赵启兰.库存管理[M].北京:高等教育出版社,2005[2]谭浩强,张基温.C语言程序设计教程<第3版>[M].北京:高等教育出版社,2006[3]黄明、梁旭、万洪莉.C语言课程设计[M].北京:电子工业出版社,2006[4]郭宁,郑小玲.管理信息系统[M].北京:人民邮电出版社,2006[5]赵池龙,杨林,陈伟.实用软件工程[M].北京:电子工业出版社,2006附录#include<stdio.h>#include<io.h>#include<stdlib.h>#include<string.h>#defineMAX60structstudent{charno[10];//学号charname[50];//姓名charclas[5];//班级intscore[5];//学分};structdata{intcount;//当前学生数组中学生的个数structstudentstu[MAX];//学生数组}dd;//子函数声明voidmenu<>;//菜单函数voidto_menu<>;//返回菜单函数voidview_data<>;//查看所有学生信息voidsave_data<>;//保存数据voidadd_data<>;//输入学生数据voidread_data<>;//读取数据voiddelete_data<>;//删除数据voidedit_data<>;//修改数据voidquery_data_no<>;//查找〔按学号voidquery_data_clas<>;//查找〔按班级voidsort_data_no<>;//排序〔学号voidtongji<>;//统计某班学生学分完成情况//主函数main<>{intfun;read_data<>;menu<>;while<1>{printf<"请输入功能号[0-8]:",&fun>;scanf<"%d",&fun>;switch<fun>{case0:break;//退出case1:view_data<>;break;//查看所有学生信息case2:add_data<>;break;//输入学生记录case3:delete_data<>;break;//删除学生记录case4:edit_data<>;break;//修改学生记录case5:query_data_no<>;break;//查询〔学号case6:query_data_clas<>;break;//查询〔班级case7:sort_data_no<>;break;//排序〔学号case8:tongji<>;break;//统计某班学生学分完成情况default:printf<"输入错误!">;break;}if<fun==0>break;to_menu<>;}}voidmenu<>/*显示主菜单*/{system<"cls">;//清屏printf<"\n">;printf<"\t\t★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★\n">;printf<"\t\t☆☆\n">;printf<"\t\t☆★☆学分管理系统☆★☆\n">;printf<"\t\t☆☆\n">;printf<"\t\t☆[0]退出[1]查看所有学生信息☆\n">;printf<"\t\t☆☆\n">;printf<"\t\t☆[2]输入学生记录[3]删除学生记录☆\n">;printf<"\t\t☆☆\n">;printf<"\t\t☆[4]修改学生记录[5]查询〔学号☆\n">;printf<"\t\t☆☆\n">;printf<"\t\t☆[6]查询〔班级[7]排序〔学号☆\n">;printf<"\t\t☆☆\n">;printf<"\t\t☆[8]统计某班学生学分完成情况☆\n">;printf<"\t\t☆☆\n">;printf<"\t\t★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★\n\n">;}voidto_menu<>//等待用户按回车后回到主菜单{charc1,c2;printf<"\n\n\n按回车键返回主菜单...">;scanf<"%c%c",&c1,&c2>;//第一个字符吸收上次的确认回车键menu<>;}voidview_data<>//查看所有学生信息{inti;printf<"学号\t姓名\t班级\t基础课\t专业课选修课人文类课实验课\n">;printf<"\n-------------------------------------------------------------------\n">;for<i=0;i<dd.count;i++>printf<"%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n",dd.stu[i].no,dd.stu[i].name,dd.stu[i].clas,dd.stu[i].score[0],dd.stu[i].score[1],dd.stu[i].score[2],dd.stu[i].score[3],dd.stu[i].score[4]>;}voidsave_data<>//将数据从结构体数组保存到文件中{FILE*fp;//文件指针inti,k;k=dd.count;fp=fopen<"dada.txt","w">;//文件存储位置:当前文件夹fwrite<&k,sizeof<int>,1,fp>;for<i=0;i<k;i++>fwrite<&dd.stu[i],sizeof<structstudent>,1,fp>;fclose<fp>;}voidadd_data<>//输入学生记录{structstudentst;intb;inta;intk;while<1>{printf<"\n请输入学生信息:">;printf<"\n学号\t姓名\t班级">;printf<"\n---------------------------------------------------------------\n">;scanf<"%s%s%s",st.no,,st.clas>;k=dd.count;strcpy<dd.stu[k].no,st.no>;strcpy<dd.stu[k].name,>;strcpy<dd.stu[k].clas,st.clas>;printf<"\n请输入基础课学分<0-50>:">;scanf<"%d",&a>;if<a>50>dd.stu[k].score[0]=50;elsedd.stu[k].score[0]=a;printf<"\n请输入专业课学分<0-50>:">;scanf<"%d",&a>;if<a>50>dd.stu[k].score[1]=50;elsedd.stu[k].score[1]=a;printf<"\n请输入选修课学分<0-24>:">;scanf<"%d",&a>;if<a>24>dd.stu[k].score[2]=24;elsedd.stu[k].score[2]=a;printf<"\n请输入人文课学分<0-8>:">;scanf<"%d",&a>;if<a>8>dd.stu[k].score[3]=8;elsedd.stu[k].score[3]=a;;printf<"\n请输入实验课学分<0-20>:">;scanf<"%d",&a>;if<a>20>dd.stu[k].score[4]=20;elsedd.stu[k].score[4]=a;dd.count++;printf<"\n\n继续添加学生信息[1-yes0-no]:">;scanf<"%d",&b>;if<b==0>break;}save_data<>;}voidread_data<>//将数据从文件读到结构体数组中{FILE*fp;inti,k;structstudentst;k=0;if<access<"dada.txt",0>==-1>//如果文件不存在{fp=fopen<"dada.txt","w">;fwrite<&k,sizeof<int>,1,fp>;fclose<fp>;}fp=fopen<"dada.txt","r">;fread<&k,sizeof<int>,1,fp>;dd.count=k;for<i=0;i<k;i++>{fread<&st,sizeof<structstudent>,1,fp>;strcpy<dd.stu[i].no,st.no>;strcpy<dd.stu[i].name,>;strcpy<dd.stu[i].clas,st.clas>;dd.stu[i].score[4]=st.score[4];dd.stu[i].score[3]=st.score[3];dd.stu[i].score[2]=st.score[2];dd.stu[i].score[1]=st.score[1];dd.stu[i].score[0]=st.score[0];}fclose<fp>;}voiddelete_data<>//删除学生记录{inti,k,j;charno[10];printf<"\n请输入要删除学生的学号:">;scanf<"%s",no>;k=-1;for<i=0;i<dd.count;i++>{if<strcmp<dd.stu[i].no,no>==0>{k=i;break;}}if<k==-1>{printf<"\n\n没有找到该学生<学号-%s>!",no>;}else{for<j=k;j<dd.count-1;j++> { dd.stu[j]=dd.stu[j+1]; }save_data<>;printf<"\n\n删除学生<学号-%s>记录成功!",no>; dd.count--;}}voidedit_data<>//修改学生记录{structstudentst;inti,k,a,b,select;charno[10];printf<"\n请输入要编辑学生的学号:">;scanf<"%s",no>;k=-1;for<i=0;i<dd.count;i++>{if<strcmp<dd.stu[i].no,no>==0>{k=i;break;}}if<k==-1>{printf<"\n\n没有找到该学生<学号-%s>!",no>;}else{printf<"\n姓名\t班级\n">;printf<"\n----------------------------------\n">;scanf<"%s%s",,st.clas>;strcpy<dd.stu[k].name,>;strcpy<dd.stu[k].clas,st.clas>;printf<"1基础课***2专业课***3选修课***4人文类课***5实验课">;printf<"请选择你要修改的课程">;scanf<"%d",&select>;switch<select>{case1:printf<"\n请输入基础课学分<0-50>:">;scanf<"%d",&a>;if<a>50>dd.stu[k].score[0]=50;elsedd.stu[k].score[0]=a;break;case2:printf<"\n请输入专业课学分<0-50>:">;scanf<"%d",&a>;if<a>50>dd.stu[k].score[1]=50;elsedd.stu[k].score[1]=a;break;case3:printf<"\n请输入选修课学分<0-24>:">;scanf<"%d",&a>;if<a>24>dd.stu[k].score[2]=24;elsedd.stu[k].score[2]=a;break;case4:printf<"\n请输入人文课学分<0-8>:">;scanf<"%d",&a>;if<a>8>dd.stu[k].score[3]=8;elsedd.stu[k].score[3]=a;break;case5:printf<"\n请输入实验课学分<0-20>:">;scanf<"%d",&a>;if<a>20>dd.stu[k].score[4]=20;elsedd.stu[k].score[4]=a;break; }printf<"\n\n继续修改学生信息[1-yes0-no]:">;scanf<"%d",&b>;if<b==1> edit_data<>;elsesave_data<>;printf<"\n\n编辑学生记录<学号-%s>成功!",no>;}}voidquery_data_no<>//查询〔学号{inti,k;charno[10];printf<"\n请输入要查询学生的学号:">;scanf<"%s",no>;k=-1;for<i=0;i<dd.count;i++>{if<strcmp<dd.stu[i].no,no>==0>{if<k==-1>{printf<"\n\n学号\t姓名\t班级\t基础课\t专业课\t选修课\t人文类课\t实验课">;printf<"\n-----------------------------------------------------------------\n">;}k=i;printf<"%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n",dd.stu[i].no,dd.stu[i].name,dd.stu[i].clas,dd.stu[i].score[0],dd.stu[i].score[1],dd.stu[i].score[2],dd.stu[i].score[3],dd.stu[i].score[4]>;}}if<k==-1>{printf<"\n\n没有找到该学生<学号-%s>!",no>;}}voidquery_data_clas<>//查询〔班级{inti,k;charclas[10];printf<"\n请输入要查询学生的班级:">;scanf<"%s",clas>;k=-1;for<i=0;i<dd.count;i++>{if<strcmp<dd.stu[i].clas,clas>==0>{if<k==-1>{printf<"\n\n学号\t姓名\t班级\t基础课\t专业课\t选修课\t人文类课\t实验课">;printf<"\n-----------------------------------------------------------------\n">;}k=i;printf<"%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n",dd.stu[i].no,dd.stu[i].name,dd.stu[i].clas,dd.stu[i].score[0],dd.stu[i].score[1],dd.stu[i].score[2],dd.stu[i].score[3],dd.stu[i].score[4]>;}}if<k==-1>{printf<"\n\n没有找到该班级-%s!",clas>;}}voidsort_data_no<>//排序〔学号{inti,k;structstudenttmp;k=dd.count-1;while<k>0>{for<i=0;i<k;i++>{if<strcmp<dd.stu[i].no,dd.stu[i+1].no>>0>//最大的放末尾{strcpy<tmp.no,dd.stu[i].no>;strcpy<,dd.stu[i].name>; strcpy<tmp.clas,dd.stu[i].clas>;tmp.score[4]=dd.stu[i].score[4]; tmp.score[3]=dd.stu[i].score[3]; tmp.score[2]=dd.stu[i].score[2]; t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论