C语言高校社团管理系统设计报告.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高校社团管理系统设计报告
一题目要求,内容
在高校中,为了丰富学生的业余生活,在学校的帮助下,会成立许多社团,少则几个,多则几十个。
为了有效管理这些社团,要求编写程序实现社团招收新成员、修改社团相应信息、老成员离开社团、查询社团情况、统计社团成员数等功能。
二设计思想
根据题目要求,定义新的数据类型Club,用于存储社团信息,并采用单链表的方式将不同的社团连接起来,新定义的数据类型Club 中包含结构体数组Member ClubMember[MaxMember],用于存储社团成员信息。
其次,定义了不同的功能函数满足所需的功能要求。
三总体结构(模块结构图,函数功能)
四源代码,运行结果
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#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<MaxMember;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<MaxMember;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<ClubNum(C);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<MaxMember;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<MaxMember;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<MaxMember;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;j<p->MeNum;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遍。
比如:我已平静下来,我能够考好、我有信心,一定能考出理想的成绩等等。
第四,分析内容,查找相关要点。
借助试卷上其它试题,也许会给考生提供某些线索。
因此不要轻易放弃,查看试题中的相关要点,看看是否能给考生提供线索或启发。