高校科研管理系统.docx
《高校科研管理系统.docx》由会员分享,可在线阅读,更多相关《高校科研管理系统.docx(24页珍藏版)》请在冰豆网上搜索。
高校科研管理系统
用C++语言
完成某高校科研管理系统的设计与实现
摘要
近年来,随着各个高校校园网络建设的全面推进和科研力度的进一步加大,旧模式下的科研管理信息系统越来越不适应新形势的需要,本次课程设计利用visualc++6.0平台构造科研管理系统,使科研管理工作实现简单的新建,查找某科研项目简单的信息,修改某科研项目信息,删除某科研项目等功能。
系统开发平台为windows2000,采用了结构化与面向对象两种程序设计方法,为了更好的完成该科研管理系统的运行。
关键词程序设计;C++;
目 录
1引言………………………………………………………………………
1.1课程设计目的…………………………………………………………
1.2课程设计的内容…………………………………………………………
1.3课程设计的背景…………………………………………………………
2程序说明………………………………………………………………………
2.1课程设计思路说明………………………………………………………
2.2所需库函数说明…………………………………………………………
3系统结构及系统图示…………………………………………………………
3.1系统功能函数……………………………………………………………
3.2系统结构…………………………………………………………………
3.3程序的实现………………………………………………………………
3.4程序调试…………………………………………………………………
4结束语……………………………………………………………………………
致谢……………………………………………………………………………
附录1设计源程序清单……………………………………………………
1引言
随着高等学校科研建设的不断深入发展,科研人员、项目、成果逐年增加,但是长期以来,科研资料及其数据以文字和表格形式存档,不但门类广而且繁杂,格式不统一,管理起来显得混乱;甚至一些资料和数据丢失或残缺,给正常的教学、科研和管理工作带来了极大的不便,管理效率较低;由于各院校工作的特殊性,套用标准管理方式显然不十分适宜。
在当前的形势下,有必要开发适合高院校使用的科研管理系统,使其能更方便、更有效和更安全地管理各种相关资料和数据,并且具备实时处理能力,提高工作效率和工作质量。
某高校科研管理系统的工作重心是全心全意为广大教师和科研工作者提供一种高效率、手续简便的服务,要做到这一点必须具备一个能满足新形势需求的、先进的、高效的科研信息管理系统。
高校科研管理系统的开发,其目的是要将先进的管理技术运用到高校科研管理中来,通过该系统,不但能完成学校的科研项目日常管理工作,还可以及时向各级领导、上级主管部
门提供报表、数据信息,为领导的决策提供一定的参考[1]。
1.1课程设计目的
本次设计题目:
“某高校科研管理系统的设计与实现”是利用C++程序设计语言设计一个简单的高校管理系统用实现对高校科研信息的简单管理,如增加新科研项目;删除某科研项目;对已完成的科研项目进行存储;查询某科研项目;显示某科研项目的简单信息,等等。
程序虽然简单,但对于一个计算机初学者来说是很有必要的,在程序设计过程中通过查阅资料,请教老师,请问同学,让我对C++有了更深的认识。
1.2课程设计的内容
本系统分新建、删除、查询、建立已完成项目库等四大功能。
其中查询是按照科研项目名查询,系统管理则包括对科研信息的新建,删除及已完成项目库的建立。
本课程设计主要解决在一个学校科研信息的管理。
在课程设计中,系统开发平台为Windows2000,程序设计设计语言采用VisualC++,由于没能很好的运用数据库,对于数据的存储还有待改进。
程序运行平台为Windows98/2000/XP程序通过调试运行,初步实现了设计目标,并且经过完善后,将可以应用在高校中解决实际问题。
1.3课程设计的背景
科学研究是高等学校的重要工作之一,对于一所高等院校来说,学科门类多,科研项目及成果所涉及科学领域较广,其数量亦比较大,这给管理造成了一定的困难,通过计算机进行管理无疑是最科学和最有效的方法,一方面可提高工作效率和工作质量,同时又便于部门之间进行信息交流。
科研管理信息系统是一个由人、计算机组成的能进行科研信息的搜集、传递、存贮、加工、维护和使用的系统,该系统能够实时反映高校的科研活动,为日常事务的处理和管理职能提供支持。
在人类发明计算机之前,管理信息系统完全是手工作业,随着计算机技术的产生和发展,管理信息系统的结构发生了很大的改变,计算机强大的数据处理能力及现代化的网络通讯技术大大提高了管理信息系统的效能。
作为高校的科研管理人员要分清楚哪些信息适合计算机处理,哪些信息更适合于手工作业,在工作中将两种方式有机地结合,互相取长补短,以求达到最佳的管理方式。
因此,使科研管理工作更加规范化、科学化,建设一个科研管理信息系统已显得非常重要。
高校科研管理信息系统通常包括科研人员信息管理、科研项目管理、科研成果管理、学术交流管理、业绩考核管理等。
传统的科研管理方法已不再适合目前的科研管理的工作的要求,因此加强科研管理,实现管理科学化,通过管理促进科研的发展,更好地为经济建设服务,则是今后科研管理工作的指导思想。
实行科学化的管理,必须尊重科学研究的规律,改变以往那种静止、封闭的行政管理为主的模式,突出科研工作动态、开放的行业性管理特点。
它需要全面系统地掌握科研信息,而管理信息系统就是综合利用计算机硬件、软件、网络、数据库等现代化管理手段来满足这个需求的,科研管理信息系统的建立是实现科研管理科学化的一个重要任务[1]。
2程序说明
2.1课程设计思路说明
我在对本课程设计思考与查询资料的过程中发现科研管理系统是一个十分庞大的系统,其科研管理系统可分为科研人员管理系统;科研经费管理系统;科研信息管理系统等等。
想到自己还是个计算机的初学者,对数据库还不能很好的运用,所以对于科研人员管理系统与科研经费管理系统的设计与实现还不能完成,就对科研信息管理系统做了一个简单的程序。
使用了C++的一些语法知识(类,函数等)配合输入输出流(cin和cout)来解决问题。
并运用了C++中最能解决连接问题的指针:
指针使用灵活,可以让你自己管理内存,在你需要的时候及时分配内存,不需要的时候释放掉;举个例子,在一般的链表中,当你要插入一个结点的时候可以为这个结点动态分配内存再插入进链表中,而你在删除完一个结点的时候释放这一部分空间以免占据多余的内存,当然指针的好处远远不止这些,比如:
可以有效地表示复杂的数据结构;它能够为调用函数灵活地修改实参变量的值,在函数调用时能够获得1个以上的结果;支持动态内存分配,能够方便地实现动态数据结构(如二叉树和链表);能够直接处理内存单元地址,可以提高程序的运行速度进而提升处理问题的速度等等。
当然,因为指针是直接访问地址,所以相对比较麻烦而且很容易出错[2]。
完成相关资料的查询后我开始设计程序。
第一步,因为结构体变量做链表的结点最为合适,所以程序的第一部分我就先通过一个结构体定义了每个记录的基本形式。
structscience//结构体
{
//intid;
charname[N];//字符串数组
charauthor[N];
charpublishing_company[N];
intdate;
boolstate;
science*next;
}myscience;
第二步,我定义了一个kenyan类,用来声明下面程序需要使用到的功能函数,比如lend()、find()、input()等等,同时声明一些私有成员。
第三步,功能函数的设计,分别设计了新增(input)、删除(del)、查找(find)、显示(show)、查询科研项目状态(lend)。
最后,我编写简单的主函数,定义了类对象t,用以实现程序。
2.2所需库函数说明
为文件分配空间所用库函数:
#include
打开文件用到的库函数:
#include
使用字符串所需要库函数:
#include
C++语言输入输出流库函数:
#include
在程序代码的起始处包含了上述头文件后,当需要使用到的时候就可以直接调用系统标准库里头文件信息,来完成程序调度。
因此,可以不必自己在源代码中定义库函数的实现代码。
勿庸置疑,在程序设计中灵活地运用这些系统自带库函数,能够为自己遍写程序带来较多便利。
3系统结构及系统图示
3.1系统功能函数
高校科研管理系统需要实现的功能主要有:
查找某科研项目信息、修改某科研项目信息、新增某科研项目信息、查询某科研项目的状态。
其中某科研项目信息的新增与查找是整个系统的核心。
(1)find函数
{
stringna;
system("cls");
cout<cout<<"\t\t\t\t查找 "<cout<cout<<"\t\t\t\t请输入项目名:
";
cin>>na;
p=first;
while(p!
=NULL)
{
if(p->name==na)
returntrue;
else
p=p->next;
}
returnfalse;
}
主要功能是通过科研项目名查找某科研项目的相关信息
(2)input函数
{
science*t=newscience;
system("cls");
cout<cout<<"\t\t\t\t新增科研状态"<cout<cout<<"\t\t\t\t请输入科研项目名称:
";cin>>t->name;
cout<<"\t\t\t\t请输入负责人姓名:
";cin>>t->author;
cout<<"\t\t\t\t请输入科研经费:
";cin>>t->publishing_company;
cout<<"\t\t\t\t请输入编号:
";cin>>t->date;
t->state=true;
t->next=NULL;
end->next=t;
end=t;
}
主要功能是增加某项科研项目,及相关信息的输入。
(3)lend函数
{
boolt;
t=find();
system("cls");
if(t==false)
{
cout<cout<<"\t\t\t对不起,无此科研状态!
"<}
else
{
if(p->state==false)
{
cout<cout<<"\t\t\t项目进行中"<}
else
{
p->state=false;
cout<cout<<"\t\t\t"<cout<<"\t\t\t建立已完成项目成功!
"<cout<<"\t\t\t"<}
}
p=first;
cout<<"\t\t\t";system("pause");
}
主要功能是对科研项目当前状态的确定。
3.2系统结构
3.3程序的实现
(1)因为没有使用数据库,所以必需先新建几组科研项目的相关信息。
登录执行截图如3-1所示
图3-1登录执行截图
建立科研项目如3-2所示
图3-2
(2)程序正常运行,运行截面如3-3所示
图3-3程序运行截图
3.4程序的运行
对新建的科研项目进行查找,如3-4所示
图3-4科研项目查找执行截图
对新建的科研项目信息进行查找,查找结果如3-5所示
图3-5科研项目查找结果截图
3.4程序调试
程序调试是程序设计过程中很重要的的一个环节。
为了便于查错、阅读,在设计该程序时我大多数情况下采用的是结构化程序方法编辑,
添加了尽可能多的注释,这为我后来的调试过程带来了很多方便[3]。
最出的调试错误过多,在修改过程中,发现很多都是因为在写完一个语句时忘了加上分号(;),变量名的输入错误;变量名未定义等等。
经过仔细的初步检查后我开始了上机调试,在编译和连接过程中发现错误,屏幕上显示了出错信息,根据提示找到出错的位置,加以改正,再进行编译……如此反复,直到顺利通过编译和连接为止。
错误主要有:
一、定义变量时;粗心大意错写变量名,不过这在VisualC++编译器的错误信息提示框帮助下还是很容易找到并改正的。
所以我发现在定义变量名的时候应该尽可能使用相近意思的英文单词或缩写,如:
name(姓名)、num(工作证号)、depart(部门)、t(temp)等等,这样一来就可以适当的减少对变量名的生疏,减少低级错误的过多产生,把更多的精力放在语法检查上。
二、语法错误;在书本以及VisualC++编译器的错误信息提示框的帮助下,能够处理好大多数基本语法错误。
我个人认为,作为一个程序员应该把书本上的语法看得滚瓜烂熟,才能在程序设计时驾车就熟的去使用这些语法帮助自己更好地完成程序设计目的;在精通一门语言的同时,学习多门语言的语法知识,体会两种语言的区别,对自己阅读更好优秀程序有很大裨益
三、逻辑错误;逻辑上的错误机器不易检查出来,有时候VisualC++编译器的错误信息提示框里的错误提示或许是不准确的(提示20几个错误,实际上只要改正1处其它的错误都会随之消失),这时就需要对数据处理结果进行人工分析。
这种错误是最难找的,需要编写程序的人有相当耐心和细心去找出问题所在。
4结束语
C++语言是在C语言的基础上为支持面向对象程序面研制的一种编程语言。
为了满足管理程序的复杂性的需要,1980年,贝尔实验室的BjarneStroustrup开始对C语言进行改进和扩充。
在经历了三次C++修订后,于1994年制定了ANSIC++标准的草案。
以后又经过不断完善,成为目前的C++。
C++包含了整个C,而C是建立C++的基础。
C++包含了C的全部特征和优点
,同时又添加了对面向对象编程的完全支持。
面向对象的程序设计方法强调直接以问题域中的事物为中心来思考和认识问题,并按照这些事物的本质特征把它们抽象为对象,以作为构成软件系统的基础。
这样,在现实世界中有哪些值得注意的事物,在程序中就有哪些对象与之对应。
程序设计者的任务包括两个方面:
一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起;二是考虑怎样向有关对象发送消息,以完成所需的任务。
经过一学期的认真学习,对C++这门计算机基础语言有了简单的认识。
在本次程序设计过程中,我受益量多。
对C++这门计算机基础语言有更深入的了
参考文献
[1]
[2]谭浩强.C++语言程序设计.第三版.清华大学出版社,2005
[3]叶秉哲.C++常见问题解,2000
附录1:
设计源程序清单
#include
#include
#include
#include
usingnamespacestd;
constN=100;//常变量
structscience//结构体
{
//intid;
charname[N];//字符串数组
charauthor[N];
charpublishing_company[N];
intdate;
boolstate;
science*next;
}myscience;
classkeyan//科研管理类
{
private:
science*first,*end,*p;
public:
keyan()
{
Modify();
}
voidmenu0();//程序运行
voidquit()
{
system("cls");
cout<cout<<"\t\t\t正在保存数据......"<save();
system("cls");
cout<cout<<"\t\t\t感谢您的使用!
再见!
"<exit
(1);
}
//函数原型
voidModify();
voidsave();//数据存盘
voidlend();//查询科研项目状态
boolfind();//查询科研项目信息
voidinput();//新增科研项目
voiddel();//删除科研项目
voidshow();//显示科研项目信息
voidinput1();
};
voidkeyan:
:
menu0()
{
system("cls");
intc;
cout<cout<";
cout<cout<<"\t\t\t\t主菜单"<cout<<"\t\t\t1.建立已完成项目"<cout<<"\t\t\t2.查找"<cout<<"\t\t\t3.新增科研项目"<cout<<"\t\t\t4.删除科研项目"<cout<<"\t\t\t5.退出系统"<;
cout<<"\t\t\t请选择:
";
cin>>c;
switch(c)
{
case1:
lend();
break;
case2:
show();
break;
case3:
input();
break;
case4:
del();
break;
case5:
quit();
break;
default:
break;
}
}
voidkeyan:
:
Modify()
{
fstreamfp("tushu.bat",ios:
:
in);
if(!
fp)
{
cout<cout<<"\t\t打开数据文件失败,请重新创建数据!
"<cout<inti;
cout<<"\t\t\t是否新建数据?
"<cout<cout<<"\t\t\t1.新建"<cout<<"\t\t\t 2.退出"<cout<<"\t\t\t\t";
cin>>i;
switch(i)//选择运行项目
{
case1:
input1();
break;
case2:
exit(0);
break;
default:
break;
}
}
else
{
science*t=newscience;
first=t;
fp.seekg(0,ios:
:
beg);
fp.read((char*)t,sizeof(myscience));
p=first;
t=newscience;
while(fp.read((char*)t,sizeof(myscience)))
{
//t=newscience;
p->next=t;
p=t;
}
end=t;
end->next=NULL;
p=first;
deletet;
fp.close();
}
}
voidkeyan:
:
save()//保存科研项目信息
{
fstreamfp("tushu.bat",ios:
:
out);
p=first;
while(p!
=NULL)
{
fp.write((char*)p,sizeof(myscience));
p=p->next;
}
}
voidkeyan:
:
lend()
{
boolt;
t=find();
system("cls");
if(t==false)
{
cout<cout<<"\t\t\t对不起,无此科研状态!
"<}
else
{
if(p->state==false)
{
cout<cout<<"\t\t\t项目进行中"<}
else
{
p->state=false;
cout<cout<<"\t\t\t"<cout<<"\t\t\t建立已完成项目成功!
"<cout<<"\t\t\t"<}
}
p=first;
cout<<"\t\t\t";system("pause");
}
boolkeyan:
:
find()
{
stringna;
system("cls");
cout<cout<<"\t\t\t\t查找 "<cout<cout<<"\t\t\t\t请输入项目名:
";
cin>>na;
p=first;
while(p!
=NULL)
{
if(p->name==na)
returntrue;
else
p=p->next;
}
returnfalse;
}
voidkeyan:
:
input()
{
science*t=newscience;
system("cls");
cout<cout<<"\t\t\t\t新增科研状态"