当前位置:文档之家 > C语言高校社团管理系统设计报告.doc

C语言高校社团管理系统设计报告.doc

高校社团管理系统设计报告

一题目要求,内容

在高校中,为了丰富学生的业余生活,在学校的帮助下,会成立许多社团,少则几个,多则几十个。为了有效管理这些社团,要求编写程序实现社团招收新成员、修改社团相应信息、老成员离开社团、查询社团情况、统计社团成员数等功能。

二设计思想

根据题目要求,定义新的数据类型Club,用于存储社团信息,并采用单链表的方式将不同的社团连接起来,新定义的数据类型Club 中包含结构体数组Member ClubMember[MaxMember],用于存储社团成员信息。其次,定义了不同的功能函数满足所需的功能要求。

三总体结构(模块结构图,函数功能)

C语言高校社团管理系统设计报告.doc

四源代码,运行结果

#include

#include

#include

#define MaxClub 20

#define MaxMember 20

typedefstructMNode{

intnum; /*成员学号*/

char name[6]; /*成员姓名*/

char major[8]; /*成员专业*/

char hobby[10]; /*成员爱好*/ }Member;

typedefstructCNode{

char ClubName[10]; /*社团名字*/

char intro[20]; /*社团介绍*/

char information[20]; /*社团公告*/

intMeNum; /*成员人数*/ Member ClubMember[MaxMember]; /*社团成员信息*/

structCNode *next;

}Club,*NClub;

NClubIniti(NClub C) /*系统初始化*/

{

C=(NClub)malloc(sizeof(Club));

if(!C)

{

printf("\n\t\t\t初始化失败!");exit(0);

}

C->next=NULL;

printf("\n\t\t\t初始化成功!\n");

return C;

}

intAddClub(NClub C) /*添加社团*/ {

inti;

char ch;

NClubp,q;

p=C;

for(i=1;i<=MaxClub;i++)

{

q=(NClub)malloc(sizeof(Club));

if(!q)

{

printf("\n\t\t\t创建失败!");continue;

}

printf("\n\t\t\t请输入社团名称:");

gets(q->ClubName);fflush(stdin); printf("\n\t\t\t请输入社团介绍:");

gets(q->intro);fflush(stdin);

printf("\n\t\t\t请输入社团信息:");

gets(q->information);fflush(stdin);

q->MeNum=0;

p->next=q;

q->next=NULL;

p=q; printf("\n\t\t\t是否继续创建?(Y/N)\t");

ch=getchar();fflush(stdin);

if(ch=='Y') continue;

else break;

}

return 1;

}

intClubNum(NClub C) /*统计社团数量*/

{

int total=0;

NClub p=C->next;

while(p)

{

total++;

p=p->next;

}

return total;

}

intInsertClub(NClub C) /*添加新社团*/ {

NClubp,q;

p=C;

if(ClubNum(C)>=MaxClub)

{printf("\n\t\t\t本校社团数已到最大值,不能再添加了!");return 0;}

while(p->next) p=p->next;

q=(NClub)malloc(sizeof(Club));

if(!q)

{

printf("\n\t\t\t创建失败!");return 0;

}

printf("\n\t\t\t请输入社团名称:");

gets(q->ClubName);fflush(stdin); printf("\n\t\t\t请输入社团介绍:");

gets(q->intro);fflush(stdin);

printf("\n\t\t\t请输入社团信息:");

gets(q->information);fflush(stdin);

q->MeNum=0;

p->next=q;

q->next=NULL;

p=q;

return 1;

}

intDelteClub(NClub C) /*社团注销*/ {

if(ClubNum(C)==0) {printf("\n\t\t\t学校还没有社团!");return 0;}

char cn[10],ch;

inti,flag;

NClubp,q;

p=C;

printf("\n\t\t\t请输入社团名称:");

gets(cn);

for(i=1;i<=ClubNum(C);i++)

{

q=p;

p=p->next;

if(!strcmp(cn,p->ClubName)) {flag=1;break;}

else flag=0;

}

if(flag==0) {printf("\n\t\t\t没有该社团!");return 0;}

q->next=p->next;

return 1;

}

intAddClubMember(NClub C) /*添加社团成员*/

{

if(ClubNum(C)==0) {printf("\n\t\t\t学校还没有社团!");return 0;}

char cn[10],ch;

inti,flag;

NClub p;

p=C;

printf("\n\t\t\t请输入成员所在社团:");

gets(cn);

for(i=1;i<=ClubNum(C);i++)

{

p=p->next;

if(!strcmp(cn,p->ClubName)) {flag=1;break;}

else flag=0;

}

if(flag==0) {printf("\n\t\t\t没有该社团!");return 0;}

for(i=0;i

{

printf("\n\t\t\t请输入成员的学号:");

scanf("%d",&p->ClubMember[i].num);fflus h(stdin);

printf("\n\t\t\t请输入成员的名字:");

gets(p->ClubMember[i].name);fflush(stdin) ;

printf("\n\t\t\t请输入成员的专业:");

gets(p->ClubMember[i].major);fflush(stdin) ;

printf("\n\t\t\t请输入成员的爱好:");

gets(p->ClubMember[i].hobby);fflush(stdin );

p->MeNum++;

printf("\n\t\t\t是否继续添加?(Y/N)\t");

ch=getchar();

if(ch=='Y') continue;

else break;

}

return 1;

} intAddClubNewMember(NClub C) /*添加社团新成员*/

{

if(ClubNum(C)==0) {printf("\n\t\t\t学校还没有社团!");return 0;}

char cn[10],ch;

inti,flag;

NClub p;

p=C;

printf("\n\t\t\t请输入成员所在社团:");

gets(cn);

for(i=1;i<=ClubNum(C);i++)

{

p=p->next;

if(!strcmp(cn,p->ClubName)) {flag=1;break;}

else flag=0;

}

if(flag==0) {printf("\n\t\t\t没有该社团!");return 0;}

for(i=p->MeNum;i

{

printf("\n\t\t\t请输入成员的学号:"); scanf("%d",&p->ClubMember[i].num);fflus h(stdin);

printf("\n\t\t\t请输入成员的名字:");

gets(p->ClubMember[i].name);fflush(stdin) ;

printf("\n\t\t\t请输入成员的专业:");

gets(p->ClubMember[i].major);fflush(stdin) ;

printf("\n\t\t\t请输入成员的爱好:");

gets(p->ClubMember[i].hobby);fflush(stdin );

p->MeNum++;

printf("\n\t\t\t是否继续添加?(Y/N)\t");

ch=getchar();

if(ch=='Y') continue;

else break;

}

return 1;

}

void ClubMemberNum(NClub C) /*统计社团成员人数*/

{

if(ClubNum(C)==0) {printf("\n\t\t\t学校还没有社团!");return 0;}

inti;

NClub p;

p=C->next;

for(i=0;i

{

printf("\n\t\t\t%s社团共有%d个成员!\n",p->ClubName,p->MeNum);

p=p->next;

}

}

intChangeClub(NClub C) /*修改社团信息*/

{

if(ClubNum(C)==0) {printf("\n\t\t\t学校还没有社团!");return 0;}

char cn[10];

inti,flag;

NClub p;

p=C;

printf("\n\t\t\t请输入社团名称:");

gets(cn);fflush(stdin);

for(i=1;i<=ClubNum(C);i++)

{

p=p->next;

if(!strcmp(cn,p->ClubName)) {flag=1;break;}

else flag=0;

}

if(flag==0) {printf("\n\t\t\t没有该社团!");return 0;}

printf("\n\t\t\t请输入社团名称:");

gets(p->ClubName);fflush(stdin); printf("\n\t\t\t请输入社团介绍:");

gets(p->intro);fflush(stdin);

printf("\n\t\t\t请输入社团信息:");

gets(p->information);fflush(stdin);

return 1;

}

intChangeMember(NClub C) /*修改社团成员信息*/

{

if(ClubNum(C)==0) {printf("\n\t\t\t学校还没有社团!");return 0;}

char cn[10],na[6];

inti,flag,sign,y=0;

NClub p;

p=C;

printf("\n\t\t\t请输入成员所在社团:");

gets(cn);fflush(stdin);

for(i=1;i<=ClubNum(C);i++)

{

p=p->next;

if(!strcmp(cn,p->ClubName)) {flag=1;break;}

else flag=0;

}

if(flag==0) {printf("\n\t\t\t没有该社团!");return 0;}

printf("\n\t\t\t请输入所要修改信息成员的姓名:");

gets(na);fflush(stdin);

for(i=0;i

{

if(!strcmp(na,p->ClubMember[i].name)) {sign=1,y++;break;}

else sign=0,y++;

}

if(sign==0) {printf("\n\t\t\t没有这个成员!");return 0;}

printf("\n\t\t\t请输入成员的学号:"); scanf("%d",&p->ClubMember[y-1].num);ffl ush(stdin);

printf("\n\t\t\t请输入成员的名字:");

gets(p->ClubMember[y-1].name);fflush(st din);

printf("\n\t\t\t请输入成员的专业:");

gets(p->ClubMember[y-1].major);fflush(st din);

printf("\n\t\t\t请输入成员的爱好:");

gets(p->ClubMember[y-1].hobby);fflush(st din);

return 1;

}

intDelteClubMember(NClub C) /*社团成员退团*/

{

if(ClubNum(C)==0) {printf("\n\t\t\t学校还没有社团!");return 0;}

char cn[10],na[6];

inti,flag,sign,y=0;

NClub p;

p=C;

printf("\n\t\t\t请输入成员所在社团:");

gets(cn);fflush(stdin);

for(i=1;i<=ClubNum(C);i++)

{

p=p->next;

if(!strcmp(cn,p->ClubName)) {flag=1;break;}

else flag=0;

}

if(flag==0) {printf("\n\t\t\t没有该社团!");return 0;}

printf("\n\t\t\t请输入所要删除成员的姓名:");

gets(na);fflush(stdin);

for(i=0;i

{

if(!strcmp(na,p->ClubMember[i].name)) {sign=1,y++;break;}

else sign=0,y++;

}

if(sign==0) {printf("\n\t\t\t没有这个成员!");return 0;}

for(i=y;i

{

p->ClubMember[i-1]=p->ClubMember[i];

}

p->MeNum--;

return 1;

}

intShowClubInformation(NClub C) /*显示社团信息*/

{

if(ClubNum(C)==0) {printf("\n\t\t\t没有可以显示的信息!\n");return 0;}

inti,j;

NClub p;

p=C->next;

for(i=0;p!=NULL;i++)

{

printf("\n\t社团:\n");

printf("\n\t\t名称\t介绍\t信息"); printf("\n\t\t%-8s\t%-8s\t%-8s\n",p->ClubN ame,p->intro,p->information);

printf("\n\t社团成员信息:\n");

if(p->MeNum==0) {printf("\n\t\t该社团还没有成员!\n");p=p->next;continue;}

printf("\n\t成员学号\t成员姓名\t成员专业\t 成员爱好");

for(j=0;jMeNum;j++)

{

printf("\n\t%-8d\t%-8s\t%-8s\t%-8s\n",p-> ClubMember[j].num,p->ClubMember[j].na me,p->ClubMember[j].major,p->ClubMem ber[j].hobby);

}

printf("\n\t======================== =======================\n");

p=p->next;

}

return 1;

}

void menu()

{

printf("\n\t\t\t 欢迎进入功能选择菜单\n"); printf("\t\t\t=======================\ n");

printf("\t\t\t 1.系统初始化;\n");

printf("\t\t\t 2.创建社团;\n");

printf("\t\t\t 3.添加新社团;\n");

printf("\t\t\t 4.修改社团资料;\n");

printf("\t\t\t 5.社团注销;\n");

printf("\t\t\t 6.添加社团成员;\n");

printf("\t\t\t 7.添加社团新成员;\n"); printf("\t\t\t 8.修改社团成员资料;\n"); printf("\t\t\t 9.社团成员退团;\n");

printf("\t\t\t 10.显示社团信息;\n"); printf("\t\t\t 11.统计社团成员人数;\n"); printf("\t\t\t 0.结束;\n"); printf("\t\t\t=======================\

n\n");

printf("\t\t\t选择功能:");

}

main()

{

NClub C;

for(;;)

{

menu();

int se;

scanf("%d",&se);fflush(stdin);

if(se<0||se>11) {printf("\n\t\t\t输入有误!\n");system("pause");system("cls");}

switch(se)

{

case 1:

C=Initi(C);

system("pause");

system("cls");

break;

case 2:

AddClub(C); ShowClubInformation(C);

system("pause");

system("cls");

break;

case 3:

InsertClub(C); ShowClubInformation(C);

system("pause");

system("cls");

break;

case 4: ChangeClub(C); ShowClubInformation(C);

system("pause");

system("cls");

break;

case 5: DelteClub(C); ShowClubInformation(C);

system("pause");

system("cls");

break;

case 6: AddClubMember(C); ShowClubInformation(C);

system("pause");

system("cls");

break;

case 7: AddClubNewMember(C); ShowClubInformation(C);

system("pause");

system("cls");

break;

case 8: ChangeMember(C); ShowClubInformation(C);

system("pause");

system("cls");

break;

case 9: DelteClubMember(C); ShowClubInformation(C);

system("pause");

system("cls");

break;

case 10: ShowClubInformation(C);

system("pause");

system("cls");

break;

case 11: ClubMemberNum(C);

system("pause");

system("cls");

break;

case 0:

printf("\n\t\t\t感谢使用!");

exit(0);

break;

}

}

}

五小结

通过本次数据结构课程设计的学习以及自己动手的实践,我获益匪浅。本次课程设计使我更加扎实地掌握了数据结构方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查,同时在老师同学的帮助下,最终找出了原因所在。

由于时间、个人能力有限,程序仍有很多可以改进的地方。比如,在程序执行时,必须按照规定的方式输入,为了解决这一问题可以在此程序的基础上设计错误处理机制,使程序的使用更加方便和可靠;代码可重用率较低,如果使用面向对象的设计方法,可用到继

承的方法,使程序更加简洁,可读性也大大增强;主程序界面不够美观,还是简单的控制台界面,可以尝试设计更加美观的界面。

通过本次课程设计,我有很多的体会。想要编写一个优秀的程序,我们要扎实掌握程序语言,要注重培养实践能力,要培养严谨的态度,不怕出错,培养独立思考、解决问题的能力,提高自己的实际动手能力,同时,要和老师同学多交流,便于解决问题和共同进步。

赠送以下资料

考试知识点技巧大全

一、考试中途应饮葡萄糖水

大脑是记忆的场所,脑中有数亿个神经细胞在不停地进行着繁重的活动,大脑细胞活动需要大量能量。科学研究证实,虽然大脑的重量只占人体重量的2%-3%,但大脑消耗的能量却占食物所产生的总能量的20%,它的能量来源靠葡萄糖氧化过程产生。

据医学文献记载,一个健康的青少年学生30分钟用脑,血糖浓度在120毫克/100毫升,大脑反应快,记忆力强;90分钟用脑,血糖浓度降至80毫克/100毫升,大脑功能尚正常;连续120分钟用脑,血糖浓度降至60毫克/100毫升,大脑反应迟钝,思维能力较差。

我们中考、高考每一科考试时间都在2小时或2小时以上且用脑强度

大,这样可引起低血糖并造成大脑疲劳,从而影响大脑的正常发挥,对考试成绩产生重大影响。因此建议考生,在用脑60分钟时,开始补饮25%浓度的葡萄糖水100毫升左右,为一个高效果的考试加油。

二、考场记忆“短路”怎么办呢?

对于考生来说,掌握有效的应试技巧比再做题突击更为有效。

1.草稿纸也要逐题顺序写草稿要整洁,草稿纸使用要便于检查。不要在一大张纸上乱写乱画,东写一些,西写一些。打草稿也要像解题一样,一题一题顺着序号往下写。最好在草稿纸题号前注上符号,以确定检查侧重点。为了便于做完试卷后的复查,草稿纸一般可以折成4-8块的小方格,标注题号以便核查,保留清晰的分析和计算过程。

2.答题要按先易后难顺序不要考虑考试难度与结果,可以先用5分钟熟悉试卷,合理安排考试进度,先易后难,先熟后生,排除干扰。考试中很可能遇到一些没有见过或复习过的难题,不要蒙了。一般中考试卷的题型难度分布基本上是从易到难排列的,或者交替排列。

3.遇到容易试题不能浮躁遇到容易题,审题要细致。圈点关键字词,边审题边画草图,明确解题思路。有些考生一旦遇到容易的题目,便觉得心应手、兴奋异常,往往情绪激动,甚至得意忘形。要避免急于

求成、粗枝大叶,防止受熟题答案与解题过程的定式思维影响,避免漏题,错题,丢掉不该丢的分。

4. 答题不要犹豫不决选择题做出选择时要慎重,要关注题干中的否定用词,对比筛选四个选项的差异和联系,特别注意保留计算型选择题的解答过程。当试题出现几种疑惑不决的答案时,考生一定要有主见,有自信心,即使不能确定答案,也不能长时间犹豫,浪费时间,最终也应把认为正确程度最高的答案写到试卷上,不要在答案处留白或开天窗。

5.试卷检查要细心有序应答要准确。一般答题时,语言表达要尽量简明扼要,填涂答题纸绝不能错位。答完试题,如果时间允许,一般都要进行试卷答题的复查。复查要谨慎,可以利用逆向思维,反向推理论证,联系生活实际,评估结果的合理性,选择特殊取值,多次归纳总结。

另外,对不同题型可采用不同的检查方法。选择题可采用例证法,举出一两例来能分别证明其他选项不对便可安心。对填空题,则一要检查审题;二要检查思路是否完整;三要检查数据代入是否正确;四要检查计算过程;五要看答案是否合题意;六要检查步骤是否齐全,符号是否规范。还要复查一些客观题的答案有无遗漏,答案错位填涂,并复核你心存疑虑的项目。若没有充分的理由,一般不要改变你依据第一

感觉做出的选择。

6、万一记忆短路可慢呼吸考试中,有些考生因为怯场,导致无法集中精神,甚至大脑忽然一片空白,发生记忆堵塞。此时不要紧张,不妨尝试如下方式:

首先是稳定心态,保持镇静,并注意调节自己的呼吸率。先慢吸气,当对自己说放松时缓慢呼气,再考虑你正在努力回忆的问题,如果你仍不能回想起来,就暂时搁下这道题,开始选做其他会的试题,过段时间再回过头来做这道题。

第二,积极联想。你不妨回忆老师在讲课时的情景或自己的复习笔记,并努力回忆与发生记忆堵塞问题有关的论据和概念,把回忆起的内容迅速记下来,然后,看能否从中挑出一些有用的材料或线索。

第三,进行一分钟自我暗示。即根据自己的实际,选择能激励自己,使自己能心情平静和增强信心的话,在心中默念3至5遍。比如:我已平静下来,我能够考好、我有信心,一定能考出理想的成绩等等。

第四,分析内容,查找相关要点。借助试卷上其它试题,也许会给考生提供某些线索。因此不要轻易放弃,查看试题中的相关要点,看看是否能给考生提供线索或启发。