数据结构课程设计学分管理系统.docx

上传人:b****4 文档编号:3865344 上传时间:2023-05-06 格式:DOCX 页数:23 大小:33.64KB
下载 相关 举报
数据结构课程设计学分管理系统.docx_第1页
第1页 / 共23页
数据结构课程设计学分管理系统.docx_第2页
第2页 / 共23页
数据结构课程设计学分管理系统.docx_第3页
第3页 / 共23页
数据结构课程设计学分管理系统.docx_第4页
第4页 / 共23页
数据结构课程设计学分管理系统.docx_第5页
第5页 / 共23页
数据结构课程设计学分管理系统.docx_第6页
第6页 / 共23页
数据结构课程设计学分管理系统.docx_第7页
第7页 / 共23页
数据结构课程设计学分管理系统.docx_第8页
第8页 / 共23页
数据结构课程设计学分管理系统.docx_第9页
第9页 / 共23页
数据结构课程设计学分管理系统.docx_第10页
第10页 / 共23页
数据结构课程设计学分管理系统.docx_第11页
第11页 / 共23页
数据结构课程设计学分管理系统.docx_第12页
第12页 / 共23页
数据结构课程设计学分管理系统.docx_第13页
第13页 / 共23页
数据结构课程设计学分管理系统.docx_第14页
第14页 / 共23页
数据结构课程设计学分管理系统.docx_第15页
第15页 / 共23页
数据结构课程设计学分管理系统.docx_第16页
第16页 / 共23页
数据结构课程设计学分管理系统.docx_第17页
第17页 / 共23页
数据结构课程设计学分管理系统.docx_第18页
第18页 / 共23页
数据结构课程设计学分管理系统.docx_第19页
第19页 / 共23页
数据结构课程设计学分管理系统.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计学分管理系统.docx

《数据结构课程设计学分管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计学分管理系统.docx(23页珍藏版)》请在冰点文库上搜索。

数据结构课程设计学分管理系统.docx

数据结构课程设计学分管理系统

学号

2015-2016学年第一学期

1408210136

《数据结构程序设计》

课程设计报告

 

题目:

学分管理系统

专业:

计算机科学与技术

班级:

14级

(2)班

姓名:

王欣

指导教师:

陈广宏

成绩:

 

计算机学院

2015年12月1日

 

1需求分析.......................................................................2

2总体设计.......................................................................3

3详细设计.......................................................................4

4小结..............................................................................10

致谢..................................................................................10

参考文献..........................................................................10

源代码..............................................................................11

 

1需求分析

学生学分管理系统是运行于计算机系统下的应用软件,主要用于对学生的学号、姓名以及各项学科学分进行录入、删除、修改、查询、排序、统计、存盘等操作,为学校的教师和学生提供了一个对学生学分进行管理和查看的平台,给用户提供了一个简单友好的用户接口,主要任务如下:

1.1查看所有学生信息

根据菜单提示,选择该功能,能够逐条显示全部学生学分记录

1.2输入学生记录

用户根据菜单提示选择输入学生记录选项,进行有关学生的学号、姓名、班级、基础课学分、专业课学分、选修课学分、人文类课学分以及实验课学分的录入。

可一次性输入多条学生的学分信息记录。

1.3删除学生记录

根据提示,用户输入要进行删除学生的学号,如果在不存在该学号,则显示没有找到该学生;如果在文件中有该学号的信息存在,则将该学号所对应的姓名、学号、班级、各科学分等在对应文件中加以删除。

1.4修改学生记录

根据提示,用户输入要进行修改学分记录的学生的学号,如果在文件中不存在该学号,则显示没有找到该学生;如果在文件中有该学生的信息存在,则将提示用户选择要修改的某课程,当用户选择某课程的代码后,则将显示你所要修改的课程。

然后提示用户选择是否继续进行修改操作。

1.5查询学生信息

查询学生信息,分为根据学号查询和根据班级查询两个具体需求,菜单选项分别提示用户输入要查询学生信息的学号或班级,如果在磁盘文件中有对应的输入信息,则提示用户已找到,并逐项列出对应查找到的学生学分状况。

1.6根据学号排序学生记录

该项功能根据学生的学号项进行排序,以便用户对学生学分状况有较为直观方便的了解,并能够让学号有规律排列的学生项,在显示时集中出现,让浏览者更加清楚明白。

1.7统计学生学分完成情况

该项是统计各班学生的学分完成情况,可以很方便了解该班学生的学习水平。

2总体设计

进行总体设计,以比较抽象的方式概括的确定系统如何完成预定的任务,进而确定组成系统的每个子程序的结构,从而将一个大的程序按功能分割成一些模块,是每个模块具有功能单一、结构清晰、接口简单易于理解的小程序,并且确定各个函数之间的调用关系。

本系统主要应用结构化的设计思想,实现学生学分的输入、删除、修改、查询以及浏览等管理功能,各主要模块的数据均存储在文件中,因此包含对文件的读、写等基本操作。

在软件开发过程中应用了高级语言程序设计中的基本控制结构,如选择、循环、顺序等结构。

系统的设计方法是结构化设计方法,采用C语言进行开发。

系统功能结构图,如图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子函数设计

3.2.1菜单函数设计

菜单函数首先运行库函数system("cls")进行清屏,然后运行各个printf语句,显示主菜单,如图2所示。

图2系统主菜单

3.2.2返回主菜单函数设计

设计字符c1,c2,用c1来接受第一次输入的回车,然后再次输入回车时,调用函数menu(),返回主菜单,来实现各次操作完成后返回主菜单的任务。

3.2.3查看所有学生信息函数设计

设计for循环,定义i=0,学生总数为dd.count,利用for循环,可以显示所有学生已经记录的信息。

如图3所示:

图3查看所有学生信息

3.2.4数据从结构体数组保存到文件的函数设计

创建文件data.txt,利用for循环,把数据逐个写入文件。

3.2.5输入学生记录函数设计

根据printf语句提示,逐个输入学号、姓名、班级,调用库函数strcpy(),把各个输入项,拷贝到数组中,再对各项分数进行赋值,如果大于最大值,则显示最大值,设计成循环模式,末尾提示是否继续添加数据,利用break终止循环,最后存盘,退出程序,显示主菜单。

输入学号为106的学生信息后如图4所示。

图4输入学生信息

3.2.6删除学生记录函数设计

设计for循环以及库函数strcmp(),把输入的学号,跟已有的学号进行对比,如果没有相同的学号,则提示没有找到该学生,如果找到相同的学号,则把该学号以后的数据向前移动一位,再把学生总数减一,实现删除学生。

删除过程如下图5和图6所示。

图5输入要删除的学生

图6删除后显示

3.2.7修改学生记录函数设计

根据printf语句提示,输入要修改的学生的学号,设计for循环和库函数strcmp,对输入学号进行查找,如果没有查找到,显示没有找到该学生,如果能够查找到给学生,则进一步提示输入学生的姓名、班级,然后选择要修改的学生记录项,最后提示,是否继续录入,退出后可返回主菜单。

修改过程如下图7和图8所示。

图7编辑学生信息窗口

图8修改学生信息完成

3.2.8查询学生记录函数设计

查询学生记录分为,根据学生学号查询和根据班级查询该班所有学生的成绩,设计for循环和调用ctrcmp()函数,把要查询的结果进行显示,如果没有找到与输入匹配的字符,则显示没有找到该班级或没有找到该学生。

查询显示如下图,根据学号查询如图9所示,根据班级查询如图10所示。

图9根据学号查询学生信息

图10根据班级查询学生信息

3.2.9排序函数设计

设计while循环,用for循环和库函数strcmp将学号依次比较,然后用冒泡排序法将学号数据由小到大排列,并且各数据交换,完成排序。

排序结果如下图11所示。

 

图11根据学号排序结果

3.2.10统计函数设计

输入要统计的班级号,调用strcmp函数,查找相同班级号的学生数据,再设计for循环并调用strcmp函数,把差找出的学生数据,与要求完成的学分标准进行对比,统计出符合要求和不符合要求的学生个数,最后显示。

统计结果如下图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

#include

#include

#include

#defineMAX60

structstudent

{

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

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

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.name,st.clas);

k=dd.count;

strcpy(dd.stu[k].no,st.no);

strcpy(dd.stu[k].name,st.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

{

fread(&st,sizeof(structstudent),1,fp);

strcpy(dd.stu[i].no,st.no);

strcpy(dd.stu[i].name,st.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

{

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.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

{

if(strcmp(dd.stu[i].no,no)==0)

{

k=i;

break;

}

}

if(k==-1)

{

prin

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2