科研管理系统
湖南工业大学
课 程 设 计
资 料 袋
学院(系、部) 学年第 课程名称 面向过程程序设计(C 语言) 指导教师 职称 讲师 学生姓名 专业班级 学号
题 目 科研管理系统
成 绩 起止日期 2013 年 1 月 7 日~ 2013 年 1 月 9日
目 录 清 单
湖南工业大学
课程设计任务书
20 12 —20 13 学年第 一 学期
课程名称: 面向过程程序设计(C 语言) 设计题目: 科研管理系统 完成期限:自 2013 年 1 月 7 日至 2013 年 1 月 9 日共 3 天
指导教师(签字): 年 月 日 系(教研室)主任(签字): 年 月 日
面向过程程序设计(C 语言)课程设计
设计说明书
科研管理系统
起止日期: 2013 年 1 月 7 日 至 2013 年 1 月 9日
学班学成
生姓名 级 号 绩
指导教师(签字)
计算机与通信学院(部)
2013年 1 月 9 日
目录
1 课程设计简介............................................................................................................ 6
1.1 课程设计的目的............................................................................................. 6 1.2 课程设计内容................................................................................................. 6 2 数据结构的设计........................................................................................................ 7
2.1 建立结构体数组 ................................................................................................ 7 2.2 定义结构体容量 ................................................................................................ 7 3 功能模块(或算法)描述........................................................................................ 9
3.1 主函数模块 ....................................................................................................... 9 3.2 其他模块........................................................................................................... 9 4 程序运行结果.......................................................................... 错误!未定义书签。 5心得体会................................................................................................................... 13 参考文献...................................................................................................................... 13 附源代码...................................................................................................................... 13
1 课程设计简介
1.1 课程设计的目的
通过使用C 语言独立完成《科研管理系统》,巩固所学知识,加深对课程的理解
1.2 课程设计内容
(1)数据信息录入
基本要求:包含初始数据录入及后期增加数据进阶要求:实现从文件导入数据 (2)信息输出(显示所有项目信息、按学院输出项目信息) (3)信息查询
基本查询:能通过项目数据的每一项进行查询(如:某某老师参与的所有项目信息、2011 年12月31号前应该完成研究的所有项目、手机号码 [1**********] 的老师是谁、某某老师的手机号码是多少等)
进阶查询:部分项目组合查询(如:2011 年度计算机学院所有立项的项目、年龄在35 岁以上的女项目主持人信息) (4)信息的删除与修改
通过项目编号实现项目的删除与修改 (5)统计与排序
a 、按学院所有项目总数排序
b 、按学院所有项目经费排序(下拨+ 配套) c 、按老师主持项目的多少排序 d 、按立项时间排序 (6)数据文件的保存与读取
2 数据结构的设计
2.1 建立结构体数组及容量
struct hold//这个是定义结构体 ,用来表示项目主持人的信息 {//表示结构体中的成员 char name[20];//姓名 char sex[4];//性别 int age;//年龄 char num;//手机号 };
struct begintime//定义一个" 立项时间" 结构体 {
int year;//年 int month;//月 };
struct endtime//定义一个" 研究期限(开始时间和结束时间)" 的结构体 {
int year;//开始的年 int month;//开始的天 int day;//开始你的日 int year1;//结束的年 int month1;//结束的月 int day1;//结束的天 };
struct keyan//一个主结构体,前面的结构体是这个主结构体里成员的结构体 {
char name[20];//结构数组姓名 struct hold zhuchi;//
char biaohao[30];//项目编号
struct begintime tm1;//立项时间的内容 char danwei[10];//项目所属单位 char jibie[10];//项目级别
struct endtime tm2;//研究期限里的内容 char renyuan[100];//总共人员的名字 int spend1;// 下拨经费
int spend2;// 学校配套经费 };
2.2 函数相关声明
void welcome();//欢迎函数 int choose();//选择函数 void change();//修改函数 void add();//增加函数
void display();// 显示信息函数 void chaxun();//查询函数 void out();//删除函数 void paixu();//排序函数 int quit();//退出函数 int caidan();//主菜单函数
3 功能模块(或算法)描述
3.1 主函数模块
项目管理操作管理函数
3.2 其他模块 1.输入模块
包括输入项目的基本信息,(项目名称、项目主持人、项目编号、立项时间、
项目所属单位、项目级别、研究期限、主要研究人员、下拨经费、学校配套经费)
2. 输出模块
包括对输入的全部信息进行输出。
3.查询模块
包括按照老师的姓名和按照老师的手机号码进行详细查询。
4. 修改模块,删除模块
按照项目编号对项目信息进行修改和删除
5. 排序模块
按照项目经费总额从大到小顺序对项目信息进行排序。
按照主持人年龄从大到小顺序对项目信息进行排序。
4 程序运行结果
5心得体会
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的
本学期我们的C 语言程序设计课程的考试题目是让学生自主设计。完成的题目是设计科研管理系统 。
在大家的共同努力下,忙碌了三天,顺利完成了对此程序的编译及试运行。在设计程序的过程中,我们了解到要设计一个完整的程序,其中最难的可能就属设计整个程序的框架,其中可能会需要经过很多次的修改与调试,所以必须要有耐心,直至最后设计出自己想要的程序。
在编程的过程中,发现自己还是对一些内容不是很熟悉,希望通过在接下来的学习中仔细去领悟才C 语言。
参考文献
李长云.C 语言程序设计. 国防工业出版社,2011.08
谭浩强C 程序第5版
附源代码
# include //引用库函数
# include //字符串函数
void welcome();//欢迎函数
int choose();//选择函数
void change();//修改函数
void add();//增加函数
void display();// 显示信息函数
void chaxun();//查询函数
void out();//删除函数
void paixu();//排序函数
int quit();//退出函数
int caidan();//主菜单函数
struct hold//这个是定义结构体 , 用来表示项目主持人的信息
{//表示结构体中的成员
char name[20];//姓名
char sex[4];//性别
int age;//年龄
char num;//手机号
};
struct begintime//定义一个" 立项时间" 结构体
{
int year;//年
int month;//月
};
struct endtime//定义一个" 研究期限(开始时间和结束时间)" 的结构体
{
int year;//开始的年
int month;//开始的天
int day;//开始你的日
int year1;//结束的年
int month1;//结束的月
int day1;//结束的天
};
struct keyan//一个主结构体,前面的结构体是这个主结构体里成员的结构体
{
char name[20];//结构数组姓名
struct hold zhuchi;//
char biaohao[30];//项目编号
struct begintime tm1;//立项时间的内容
char danwei[10];//项目所属单位
char jibie[10];//项目级别
struct endtime tm2;//研究期限里的内容
char renyuan[100];//总共人员的名字
int spend1;// 下拨经费
int spend2;// 学校配套经费
};
int n;//计数用的
struct keyan k[10];//上面结构体重复10次
int main()//主函数
{
welcome();
choose();//花括里面的这两个函数是调用后面定义的函数
return 0;
}
void welcome()//定义一个欢迎函数
{
printf("************************\n");//水平制表(向右移)
printf("* 欢迎进入 *\n");
printf("* 科研项目管理系统 *\n");
printf("************************\n");
}
int choose()//定义选择函数
{
for( ; ; )//反复循环
{
switch(caidan())
{
case 1:
add();
break;
case 2:
change();
break;
case 3:
display();
break;
case 4:
chaxun();
break;
case 5:
out();
break;
case 6:
paixu();
break;
case 7:
printf("\n亲,再见噢,嘻嘻!\n");
return 0;
break;
}
}
}
int caidan()//主目录 也就是界面 部分
{
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("****************\n");
printf("亲,请您选择(1-7):");
for( ; ; )
{
int c;
scanf("%d",&c);//c是从1-7里面选择一个 数 比如选7就会退出程序 if(c>=1&&c
{
return c;
}
else
printf("\t\t亲,您输入有误, 请重新选择!");//假如输入的数字不是1-7 就会提示”亲,您输入有误, 请重新选择!
break;
}
}
void add()//定义一个" 新增项目" 函数
{
char a[2];//定义一个字符数组 表示y,n
while(1)//真的就执行下面语句
{
printf("亲,您是否增加新项目(y/n)\n");
scanf("%s",a); //这个就是用来输入y 或者n 的 输入y 就是增加项目 n 就是不增加项目
if(a[0]=='n')//输入n 就会停止 表示不增加新的项目 { break; } else//否则输入的就是y 就会新增项目 下面就是表示项目包括的内容 { printf("亲,请输入项目名称: "); scanf("%s",k[n].name); printf("亲,请输入主持人姓名: "); scanf("%s",k[n].zhuchi.name); printf("亲,请输入主持人年龄: "); scanf("%d",&k[n].zhuchi.age); printf("亲,请输入主持人性别(男性输入1 女性输入2): "); scanf("%s",a); if(a[0]=='1') strcpy(k[n].zhuchi.sex,"男");//是1的话把男复制到主持人的性别中 else strcpy(k[n].zhuchi.sex,"女"); printf("亲,请输入主持人手机号码: "); scanf("%d",&k[n].zhuchi.num); printf("亲,请输入项目编号(如:11ca1042): "); scanf("%s",k[n].biaohao); printf("立项时间(年,月): "); scanf("%d",&k[n].tm1.year); scanf("%d",&k[n].tm1.month); printf("项目所属单位\n"); printf("1.计算机\n"); printf("2.电气\n"); printf("3.冶金\n"); printf("4.包材\n"); printf("5.机械\n"); printf("6.土木\n"); printf("7.理学\n"); printf("亲,请选择(输入序号): "); scanf("%s",a); if(a[0]=='1') strcpy(k[n].danwei,"计算机"); if(a[0]=='2') strcpy(k[n].danwei,"电气"); if(a[0]=='3') strcpy(k[n].danwei,"冶金"); if(a[0]=='4') strcpy(k[n].danwei,"包材"); if(a[0]=='5') strcpy(k[n].danwei,"机械"); if(a[0]=='6') strcpy(k[n].danwei,"土木"); if(a[0]=='7') strcpy(k[n].danwei,"理学"); printf("亲,请输入项目级别\n"); printf("1.国家级\n"); printf("2.省部级\n"); printf("3.市厅级\n");
printf("亲,请选择(输入序号): ");
scanf("%s",a);
if(a[0]=='1')
strcpy(k[n].jibie,"国家级");
if(a[0]=='2')
strcpy(k[n].jibie,"省部级");
if(a[0]=='3')
strcpy(k[n].jibie,"市厅级");
printf("研究期限\n");
printf("亲,请输入起始时间(x 年 x 月 x 日): ");
scanf("%d%d%d",&k[n].tm2.year,&k[n].tm2.month,&k[n].tm2.day);//把输入的信息输入到结构体keyan 中的endtime 的年月日中
printf("亲,请输入结束时间(x 年 x 月 x 日): ");
scanf("%d%d%d",&k[n].tm2.year1,&k[n].tm2.month1,&k[n].tm2.day1); printf("亲,请输入主要研究人员(如:张三、李四、王麻子): ");
getchar();//输入字符
scanf("%s",k[n].renyuan);
printf("亲,请输入下拨经费(10:万元): ");
scanf("%d",&k[n].spend1);
printf("亲,请输入学校配套经费(10:万元 ");
scanf("%d",&k[n].spend2);
printf("亲,是否退出新建项目 返回主菜单(y/n): ");
scanf("%s",a);
n++;//每增加一个项目,N 的值就加1,就有几个修改函数,
if(a[0]=='y')
break;
}
}
}
void change() //定义一个修改函数
{
char i[20];//字符项目
char a[2];
int j;
printf("亲,请输入项目编号: ");
scanf("%s",i);
getchar();
for(j=0;j
{
if(strcmp(i,k[j].biaohao)==0)
{
printf("亲,是否修改项目名称(输入 y/n): ");
scanf("%s",a);
getchar();
if(a[0]=='y'||a[0]=='n')
{
printf("亲,请输修改后的项目名称: ");
scanf("%s",k[j].name);
}
printf("亲,是否修改的主持人姓名: ");
scanf("%s",a);
getchar();
printf("亲,请输入修改后的主持人姓名: ");
scanf("%s",k[j].zhuchi.name);
printf("亲,请输入修改后的主持人年龄: ");
scanf("%d",&k[j].zhuchi.age);
printf("亲,请输入修改后的主持人性别(男性输入1 女性输入2): "); scanf("%s",a);
if(a[0]=='1')
strcpy(k[j].zhuchi.sex,"男");
else
strcpy(k[j].zhuchi.sex,"女");
printf("亲,请输入修改后的主持人手机号码: ");
scanf("%d",&k[j].zhuchi.num);
printf("修改后的立项时间(年,月): ");
scanf("%d",&k[j].tm1.year);
scanf("%d",&k[j].tm1.month);
printf("修改后的项目所属单位\n");
printf("1.计算机\n");
printf("2.电气\n");
printf("3.冶金\n");
printf("4.包材\n");
printf("5.机械\n");
printf("6.土木\n");
printf("7.理学\n");
printf("亲,请选择(输入序号): ");
scanf("%s",a);
if(a[0]==1)
strcpy(k[j].danwei,"计算机");
if(a[0]==2)
strcpy(k[j].danwei,"电气");
if(a[0]==3)
strcpy(k[j].danwei,"冶金");
if(a[0]==4)
strcpy(k[j].danwei,"包材");
if(a[0]==5)
strcpy(k[j].danwei,"机械");
if(a[0]==6)
strcpy(k[j].danwei,"土木");
if(a[0]==7)
strcpy(k[j].danwei,"理学");
printf("亲,请输入修改后的项目级别\n");
printf("1.国家级\n");
printf("2.省部级\n");
printf("3.市厅级\n");
printf("亲,请选择(输入序号): ");
scanf("%s",a);
if(a[0]==1)
strcpy(k[j].jibie,"国家级");
if(a[0]==2)
strcpy(k[j].jibie,"省部级");
if(a[0]==3)
strcpy(k[j].jibie,"市厅级");
printf("研究期限\n");
printf("亲,请输入修改后的起始时间(x 年 x 月 x 日): ");
scanf("%d%d%d",&k[j].tm2.year,&k[j].tm2.month,&k[j].tm2.day);
printf("亲,请输入修改后的结束时间(x 年 x 月 x 日): ");
scanf("%d%d%d",&k[j].tm2.year1,&k[j].tm2.month1,&k[j].tm2.day1);//keyan结构体中的tm2中的年份
printf("亲,请输入修改后的主要研究人员(如:张三、李四、王麻子): "); getchar();
scanf("%s",k[j].renyuan);
printf("亲,请输入修改后的下拨经费: ");
scanf("%d",&k[j].spend1);
printf("亲,请输入修改后的学校配套经费: ");
scanf("%d",&k[j].spend2);
printf("亲,是否退出修改后的项目 返回主菜单(y/n): ");
scanf("%s",a);
if(a[0]=='y'||a[0]=='Y')
break;
}
if(strcmp(i,k[j].biaohao)!=0)
{
printf("亲,您所要修改的项目不存在");
break;
}
}
}
void display() //定义一个显示函数
{
int j;
int i;
printf("1.显示所有项目信息\n");
printf("2.按学院输出项目信息\n");
printf("亲,请选择1或2\n");
scanf("%d",&i);
if(i==1)
{
for(j=0;j
{
printf("项目名称: ");
puts(k[j].name);
printf("\n");
printf("主持人姓名: ");
puts(k[j].zhuchi.name);
printf("\n");
printf("主持人年龄: ");
printf("%d",k[j].zhuchi.age);
printf("主持人性别: ");
puts(k[j].zhuchi.sex);
printf("\n");
printf("主持人手机号码: ");
printf("%d",k[j].zhuchi.num);
printf("\n");
printf("项目编号: ");
printf("%s",k[n].biaohao);
printf("立项时间: ");
printf("%d ",k[j].tm1.month);
printf("%d\n",k[j].tm1.year);
printf("项目所属单位: ");
puts(k[j].danwei);
printf("项目级别: ");
puts(k[j].jibie);
printf("\n");
printf("研究期限: ");
printf("%d %d %d ",k[j].tm2.year,k[j].tm2.month,k[j].tm2.day);
printf("%d %d %d\n",k[j].tm2.year1,k[j].tm2.month1,k[j].tm2.day1);
printf("主要研究人员: ");
puts(k[j].renyuan);
printf("\n");
printf("下拨经费: ");
printf("%d\n",k[j].spend1);
printf("学校配套经费: ");
printf("%d",k[j].spend2);
}
}
}
void chaxun() //定义一个查询函数
{
char i[20];
int j;
printf("亲,请参与项目之老师姓名: ");
scanf("%s",i);
getchar();
for(j=0;j
{
if((strcmp(i,k[j].zhuchi.name)==0)||(strcmp(i,k[j].renyuan)==0))//strcmp比较字符串的函数(如果输入的主持人的名字和查询的一样就执行下面的)
{printf("项目名称: ");
puts(k[j].name);
printf("\n");
printf("主持人姓名: ");
puts(k[j].zhuchi.name);
printf("\n");
printf("主持人年龄: ");
printf("%d",k[j].zhuchi.age);
printf("主持人性别: ");
puts(k[j].zhuchi.sex);
printf("\n");
printf("主持人手机号码: ");
printf("%d",k[j].zhuchi.num);
printf("\n");
printf("项目编号: ");
printf("%d",k[n].biaohao);
printf("立项时间: ");
printf("%d ",k[j].tm1.month);
printf("%d\n",k[j].tm1.year);
printf("项目所属单位\n");
puts(k[j].danwei);
printf("项目级别: ");
puts(k[j].jibie);
printf("\n");
printf("研究期限: ");
printf("%d %d %d",k[j].tm2.year,k[j].tm2.month,k[j].tm2.day);
printf("%d %d %d\n",k[j].tm2.year1,k[j].tm2.month1,k[j].tm2.day1);
printf("主要研究人员: ");
puts(k[j].renyuan);
printf("\n");
printf("下拨经费: ");
printf("%d\n",k[j].spend1);
printf("学校配套经费: ");
printf("%d",k[j].spend2);
}
}
}
void paixu()
{
int i,j,p;//i,表示趟数,j 每趟比较的次数,p 表示一个中间变量
printf("立项的时间进行排序:\n");
for(i=0;i
for(j=0;j
{
p=k[j].tm1.year;
if(k[j].tm1.year
k[j].tm1.year=k[j+1].tm1.year;
k[j+1].tm1.year=p;
}
}
void out()
{
char a[20];
int i,j;
printf("亲,请输入要删除的编号项目编号(如:11ca1042): ");
scanf("%s",a);
for(i=0;i
if(strcmp(k[i].biaohao,a)!=0)//如果输入的一个和原始的数据相等;就用下个结构体覆盖上一个结构体
for(j=i;j
{
k[j]=k[j+1];
}
}
.21.