华中科技大学计算机科学与技术学院《C语言程序设计》课程设计实验报告题目:科研项目信息管理系统专业:计算机班级:学号:姓名:成绩:指导教师:李开完成日期:2009年10 月20 日科研项目信息管理系统一、系统功能结构模块图二、数据结构设计及其用法说明typedef struct lakey{char name[30];/*团队名称*/int total;/*自然科学基金的科研项目数*/float dudu;/*经费数*/struct lakey *next;}*plakey;/*统计3中用到的数据结构*/typedef struct emmey{char name[30];/*团队名称*/int teacher;/*老师人数*/int harden;/*项目数*/float bizhi;/*比值*/struct emmey *next;}*pemmey;/*统计4中用到的数据结构*/typedef struct kPro{char code[15];/*项目编号*/char sort;/*项目种类*/int aking1;char time[8];/*项目时间*/float dudu;/*项目经费*/int aking2;char beiler[15];/*负责人*/int aking3;char keynoName[30];/*所在团队名称*/struct kPro *next;}harden,*pHarden;typedef struct Komo{int teacher;/*老师人数*/char name[20];/*院系名称*/int student;/*学生人数*/float bizhi;/*二者比值*/struct Komo *next;}*pKomo;/*统计1中用到的数据结构,统计结果放在这个数据结构中*/typedef struct kTea{char name[30];/*团队名称*/char beiler[15];/*负责人*/int stuNum;/*学生人数*/int aking2;int coco;/*老师人数*/char colName[20];/*所在院系的名称*/int aking1;struct kTea *next;pHarden child;}keyno,*pKeyno;typedef struct edward{char name[20];/*院系名称*/int totalnum;/*项目总数*/int num973;/*973项目数*/int num863;/*863项目数*/float amount;/*经费数*/struct edward *next;}*pedward;/*统计2中用到的数据结构*/typedef struct kCol{char name[20];/*院系名称*/int aking;char beiler[15];/*院系负责人*/struct kCol *next;char call[15];/*负责人电话号码*/pKeyno child;}kekey,*pKekey;三、程序结构四、各模块的功能1、pKekey Charge(pKekey alpha)/*这个函数将文件中的内容写入链表中*/2、pKekey temption(int aking,int aking1,int aking2,pKekey item1,pKeynoitem2,pHarden item3,pKekey alpha,int sort)/*这个函数用于向指定位置(aking)添加指定节点(item),alpha是头结点。
sort控制3种添加类型*/3、pKekey reserv(int aking1,int aking2,int aking3,pKekey alpha,intsort)/*删除指定位置的节点,sort控制删除的类型*/4、pKekey tab(pKekey alpha)/*这个函数修改文本,使用时先将链表中的对象修改掉,再调用这个函数将文本库中的内容修改掉*/5、pKekey seamood(char *boss,char *name,pKekey alphaer,pKekeyresult,int sort)/*查询,sort为1表示利用院系负责人来查询,输入:char *boss,pKekey alphaer,pKekey result,int sort,sort为2表示用院系名的一部分来查询,输入:char *name,pKekey alphaer,pKekey result,int sort*/6、pKeyno foward (char *name,int num,pKekey alphaer,pKeyno result,intsort)/*查询,sort为1表示利用团队名称查询,输入:char *name,pKekey alphaer,pKeyno result,int sort,sort为2表示利用教师人数查询,输入:nt num,pKekey alphaer,pKeyno result,int sort*/7、pHarden codyssed (char *code,pKekey alphaer,pHarden result,intsort)/*查询,sort 为1表示由序列号查,此时code表示序列号,sort为2表示由名字来查,此时code表示名字*/8、void awesome(pKekey alpha,pKomo *result1,pedward *result2,plakey*result3,pemmey *result4,char *year,int sort)/*统计:sort取1,2,3,4时分别按课设是上的要求统计,其中year在2时输入*/五、试验结果1、主菜单页面2、数据处理之输入3、查询功能4、统计功能六、体会这是我第一次做这么大型的且比较复杂的一个C程序,从暑假开始边看书边慢慢尝试到如今全部做出来花费了许多时间与精力。
以前接触到的C程序设计都是最简单、最基本的编程,就连最后的期末考试也只是一些小程序,并不像课程设计这样庞大复杂。
小程序是考察我们对基本概念的熟识,而这种大程序则是考察了我们对整体构架的设计以及各种小程序的拼接,看似不难,实则会遇到许多意想不到的困难,当然,这过程当中我学到了许多。
刚开始接到任务书的时候我感到无从下手,知道应该注重链表但是仍旧无法从整体上设计出这个程序,后来经过网上的搜索资料以及和其他同学的讨论,对这个科研项目信息管理系统进行一些列分块,拆成几个部分,然后再逐个突破,这样显得有条理且方便。
接下来是真正开始动手写程序,随之而来的是一些列的问题,其中最困扰我的是十字链表,过去我们使用的一般是单向链表,虽然在此基础上建立十字链表并不困难,但是如何保存则成了一个难题,后来经过对书本的钻研解决了次问题,从中我更加了解各种文件操作函数的用法。
在所有内核做好之后,接下来就是界面的问题,最开始的时候我考虑做图形界面,但是由于时间比较紧迫,不得不放弃,只好做了一个简易菜单,菜单设计容易,可是将界面和程序内核结合起来却又是一个难题。
最后将这些函数和文件组合在一起后,终于形成了一个完整的可以运行的系统。
由于我只是C语言初学者,虽然啃过书本,但是仍能力有限,所以界面不够漂亮,有些功能也不够完善,但是我能够做出一个可以正确运行的科研项目信息管理系统已是很有成就感,尽管它不完善。
这次课程设计,巩固了我的C语言的知识,锻炼了我的动手能力,让我在这一方面有了进一步的提升。
其实,让我感触最深刻的是,学好C语言,不仅仅在于啃光书本上的知识,考试能得高分,最重要的是实践!俗语云:实践出真知。
只有动手了才会更快发现自己的错误,以便于及时改正,才能更快的提升自己的能力,纸上谈兵终究只是一段段空话,毫无实际意义!当然,不仅仅是在学习这一门语言方面有了认知,在其他方面也有了一些认识,最大的收获是写课设让我更加细心,我往往由于一个符号的错误导致程序无法运行,所以,注重细节是非常重要的。
最后,我觉得,其实C语言和其他中文、英语、日语等语言一样,虽然是由一些枯燥的字母字符组成,但是经过我们人为的设计排列,可以组成精美的东西,就像各国都有文学名作一样,C语言亦可以写出庞大复杂实用的程序系统,便于大家使用!七、参考文献《C语言程序设计》李开曹计昌卢萍著科学出版社《C语言程序设计(第二版)》谭浩强著清华大学出版社附录#include "string.h"#include "stdio.h"#include "stdlib.h"#include "conio.h"typedef struct kNod{char c;struct kNod *next;}kame,*pKame;/*辅助性数据结构*/typedef struct lakey{char name[30];/*团队名称*/int total;/*自然科学基金的科研项目数*/ float dudu;/*经费数*/struct lakey *next;}*plakey;/*统计3中用到的数据结构*/typedef struct emmey{char name[30];/*团队名称*/int teacher;/*老师人数*/int harden;/*项目数*/float bizhi;/*比值*/struct emmey *next;}*pemmey;/*统计4中用到的数据结构*/typedef struct kPro{char code[15];/*项目编号*/char sort;/*项目种类*/int aking1;char time[8];/*项目时间*/float dudu;/*项目经费*/int aking2;char beiler[15];/*负责人*/int aking3;char keynoName[30];/*所在团队名称*/ struct kPro *next;}harden,*pHarden;typedef struct Komo{int teacher;/*老师人数*/char name[20];/*院系名称*/int student;/*学生人数*/float bizhi;/*二者比值*/struct Komo *next;}*pKomo;/*统计1中用到的数据结构,统计结果放在这个数据结构中*/typedef struct kTea{char name[30];/*团队名称*/char beiler[15];/*负责人*/int stuNum;/*学生人数*/int aking2;int coco;/*老师人数*/char colName[20];/*所在院系的名称*/int aking1;struct kTea *next;pHarden child;}keyno,*pKeyno;typedef struct edward{char name[20];/*院系名称*/int totalnum;/*项目总数*/int num973;/*973项目数*/int num863;/*863项目数*/float amount;/*经费数*/struct edward *next;}*pedward;/*统计2中用到的数据结构*/typedef struct kCol{char name[20];/*院系名称*/int aking;char beiler[15];/*院系负责人*/struct kCol *next;char call[15];/*负责人电话号码*/pKeyno child;}kekey,*pKekey;FILE* orgive(FILE *in,pKekey pointer1,pKeyno pointer2,pHarden pointer3,int sort) {int c,i=0;if(sort==1){while((c=fgetc(in))!=';'){pointer1->name[i]=c;i++;}for(;i<20;i++)pointer1->name[i]='\0';i=0;while((c=fgetc(in))!=';') {pointer1->beiler[i]=c;i++;}for(;i<15;i++)pointer1->beiler[i]='\0';i=0;while((c=fgetc(in))!=';') {pointer1->call[i]=c;i++;}for(;i<15;i++)pointer1->call[i]='\0'; }else if(sort==2){while((c=fgetc(in))!=';') {pointer2->name[i]=c;i++;}for(;i<30;i++)pointer2->name[i]='\0';i=0;while((c=fgetc(in))!=';') {pointer2->beiler[i]=c;i++;}for(;i<15;i++)pointer2->beiler[i]='\0';i=0;pointer2->coco=0;c=fgetc(in);while(c!=';'&&c!='-'){pointer2->coco=pointer2->coco*10+c-'0';c=fgetc(in);}if(c=='-'){fgetc(in);fgetc(in);pointer2->coco=-1;}pointer2->stuNum=0;c=fgetc(in);while(c!=';'&&c!='-'){pointer2->stuNum=pointer2->stuNum*10+c-'0';c=fgetc(in);}if(c=='-'){fgetc(in);fgetc(in);pointer2->stuNum=-1;}while((c=fgetc(in))!=';'){pointer2->colName[i]=c;i++;}for(;i<20;i++)pointer2->colName[i]='\0';}else if(sort==3){while((c=fgetc(in))!=';'){pointer3->code[i]=c;i++;}for(;i<15;i++)pointer3->code[i]='\0';pointer3->sort=fgetc(in);fgetc(in);i=0;while((c=fgetc(in))!=';'){pointer3->time[i]=c;i++;}for(;i<8;i++)pointer3->time[i]='\0';{int k=-1;c=fgetc(in);i=0;pointer3->dudu=0;if(c!='-'){while(c!=';'){if(c!='.')pointer3->dudu=pointer3->dudu*10+c-'0';elsei=1;if(i)k++;c=fgetc(in);}while(k&&i){pointer3->dudu/=10;k--;}}else{pointer3->dudu=-1;fgetc(in);fgetc(in);fgetc(in);fgetc(in);}}i=0;while((c=fgetc(in))!=';'){pointer3->beiler[i]=c;i++;}for(;i<15;i++)pointer3->beiler[i]='\0';i=0;while((c=fgetc(in))!=';'){pointer3->keynoName[i]=c;i++;}for(;i<30;i++)pointer3->keynoName[i]='\0';}return in;}pKekey Charge(pKekey alpha)/*将文件中的内容写入链表中*/ {int position[3]={0,0,0};int input;pKekey colCurrent,colPre;FILE *in=fopen("py.txt","r");if(in==NULL){printf("Open Error!");getchar();exit(-1);}alpha=NULL;fgetc(in);while((input=fgetc(in))!=')'){pKeyno teaCurrent,teaPre;colCurrent=(pKekey)malloc(sizeof(struct kCol));colCurrent->next=NULL;colCurrent->child=NULL;if(position[0]==0)alpha=colCurrent;elsecolPre->next=colCurrent;position[0]++;in=orgive(in,colCurrent,NULL,NULL,1);colCurrent->aking=position[0];position[1]=0;while((input=fgetc(in))!='}'){pHarden proCurrent,proPre;teaCurrent=(pKeyno)malloc(sizeof(struct kTea)); teaCurrent->next=NULL;teaCurrent->child=NULL;in=orgive(in,NULL,teaCurrent,NULL,2);if(position[1]==0)colCurrent->child=teaCurrent;elseteaPre->next=teaCurrent;position[1]++;teaCurrent->aking1=colCurrent->aking;teaCurrent->aking2=position[1];position[2]=0;while((input=fgetc(in))!=']'){proCurrent=(pHarden)malloc(sizeof(struct kPro)); proCurrent->next=NULL;in=orgive(in,NULL,NULL,proCurrent,3);if(position[2]==0)teaCurrent->child=proCurrent;elseproPre->next=proCurrent;position[2]++;proCurrent->aking1=colCurrent->aking;proCurrent->aking2=teaCurrent->aking2; proCurrent->aking3=position[2];proPre=proCurrent;fgetc(in);}teaPre=teaCurrent;}colPre=colCurrent;}fclose(in);return alpha;}pKekey temption(int aking,int aking1,int aking2,pKekey item1,pKeyno item2,pHarden item3,pKekey alpha,int sort)/*这个函数用于向指定位置(aking)添加指定节点(item),alpha是头结点。