第一篇:2014-春季-计算机高级语言课程设计(C)要求与安排
2014年“计算机高级语言课程设计(C)” 课程设计是实践性教学环节。在C语言课程设计阶段,学生要通过模仿范例的练习最终完成独立的程序编制任务。课程设计的目的是要让学生了解程序(软件)开发的规范方法,培养学生的实际编程能力。
在实际工作中,开发一个软件,在通过可行性论证后,软件交给用户使用前,一般要经过下列阶段。
需求分析/问题定义—设计—编写代码—组合测试
学生在完成课程设计后,应该对程序开发的各阶段及其任务有所了解和体会,通过学习和实践,初步学习和掌握程序开发过程的规范性方法。学生是否掌握程序开发过程的规范,完成任务是否合理、正确、完备,就要通过课程设计报告表达出来。
教材:张冬梅, 等编著.《基于PBL的C语言课程设计及学习指导》(北京: 清华大学出版社, 2011)
课程设计安排
以上机实验的形式自学《基于PBL的C语言课程设计及学习指导》课程设计部分的内容为主,每位同学根据自己在班级中的序号,从该教材的第六章中选择对应序号的问题作为本次课程设计的题目,完成课程设计报告的编写。
最终的成绩将根据上机考勤、课程设计报告、软件程序的完成情况来确定,请大家认真完成。
课程设计报告的编写和提交要求
1)课程设计报告必须按照《中国地质大学本科生课程论文》的模
板编写,不符合格式要求的将扣分;
2)最终必须提交的东东包括:纸质《课程论文》一份,《课程论文》
电子版一份,软件程序源码和数据(能够运行出论文中的结果)一份,每个文件都用自己的“学号+姓名”来命名。
3)提交的最后期限:2014年6月23日
课程设计报告的主要内容
下面结合《基于PBL的C语言课程设计及学习指导》第5章的例题,说明课程设计报告的各部分应该包含的主要内容。
1、需求分析/问题定义
每位学生都有一个要完成的题目。题目代表了一个实际需要解决的问题或者某项工作的实际操作过程。
“需求分析”就是由程序编制人员在深入理解用户工作过程或者用户要求的基础上,描述将要交给用户的程序(应用系统)运行后的执行情况(功能和效果),它要描述计算机将如何模拟完成用户的各项任务。“需求分析”部分是用户最后验收程序的重要依据。
题目是从用户的角度出发、使用用户的语言来叙述的。“问题定义”,它是程序设计人员与用户沟通后,从编程者的角度对问题的叙述,它是编程人员用计算机领域的术语来重新描述用户所提出的要求,用确定清晰的语言说明最终提交给用户的应用系统的性能。“问题定义”是编程人员的检验、调整、修改程序时的重要依据。
2、总体设计
总体设计部分要包含以下内容:
系统的功能模块划分(图)。如有必要,再用文字进行扼要说明。
列出自定义数据类型的定义、全局变量的定义。
说明数据文件存储的数据内容以及存储结构。
3、详细设计
选择具有代表性和典型性的模块进行详细分析,其它模块则简明扼要地说明。进行详细分析的内容是
1、叙述算法;
2、列出流程图;
3、说明模块内的控制实现的策略,指明完成控制的变量和控制逻辑;
4、说明公共函数的功能等。
4、上机操作
调试程序/程序测试
从写出代码直至得到可以真正运行的系统,必须经过程序的调试和测试。程序代码测试有一整套系统的理论和方法,有兴趣的同学可以看参考书了解更多内容。测试程序的目的不是证实自己程序的正确性而是找出其中的潜在错误。在调试程序时,可以有意输入一些边缘性的、不合理或者错误数据,测试程序是否能合理处理。测试过程,可以发现程序中的错误。在设计报告中可以列出一些你测试程序查找错误的思路做法,包括待测试的模块,准备测试数据的目的和测试数据,实际的输出结果,得出的结论,对程序作了什么修改等内容。
5、总结
这一部分是对课程设计学习过程的小结,也可以分类说明遇到的问题及解决的方法;当然也可以有感想之类的内容。
程序设计注意事项
在C语言课程设计阶段所编写的程序,是用程序解决实际问题的一次模拟练习。在编程程序过程中,除了要考虑采用良好算法提高程序的效率之外,一个重要的要求是要多从用户的角度考虑问题,编写出符合用户习惯、有足够提示信息、易于用户操作的“用户友好”系统。
足够的代码注释和提示信息程序运行过程中要求用户输入数据时,要让用
户知道待输入数据的含义、格式、范围等内容;在界面转换或者出现菜单处,要对当前状况有明确交代。例如,显示“工资查询结果界面”或者“设备管理系统主菜单”等等内容。总之,提示信息要足以让用户明白自己要进行的操作,让用户随时掌握程序当前的运行状态。
提示用语符合用户习惯程序运行界面的文字,应该尽量使用中文。在提示用语中,少用或者不用计算机专业的术语而用日常生活用语或者用户所属行业的术语代替。例如,用“整数”代替“整型数据”;用“项目”而不使用“字段”等。对程序运行的中间结果或者最终结果,要明确标示每项数据代表的含义以及数据的不同值所表示的意义,而不是简单显示存储数据所用的内存变量名称和变量的值。例如,显示“方程没有实根”,不要显示“d<0”。再如,查询结果显示为 婚姻状况:已婚而不要显示成:m == 1
减少和方便用户操作,1、减少用户的操作,如果要求输入的数据项是若干确定的内容之一,例如,性别、学历等项目,提供选项让用户选择而不是让用户输入具体值。
2、考虑到用户发生操作错误的可能性并能进行正确处理。例如,由用户选择某操作时,让用户再确认一次;或者设置一个默认值,当用户操作错误时,按默认值进行处理。如果是由用户输入数据,可以通过设置输入数据宽度来控制数据的范围,还可以设定出错的允许次数,在允许的次数内,用户可以重新操作,例如输入密码。如果用户操作错误,一是要保护数据的正确性,二是要使程序继续运行或者正常结束,不能因此使程序运行受影响。
第二篇:C语言课程设计
#include
int num1;
char name1[20];
int score;
int nelepeo;//课程已选人数
int Melepeo;//课程人数上限
struct couse * next;};
int student();
//学生登陆 int teacher();
//教师登陆 struct student//学生信息结构体 {
int num2;
char name2[20];
int nelenum[50];//已选课程编号
int nelen;//已选课程数量
struct student * next;};
void Ms(){
for(kk1=0;kk1<1100;kk1++)
for(kk2=0;kk2<1200;kk2++)
for(kk3=0;kk3<1200;kk3++);} void keyboardc()//录入课程子函数(从键盘录入){ void intoc();struct couse *p1,*p2;N1=0;p1=p2=(struct couse*)malloc(sizeof(struct couse));printf(“n课程编号:”);fflush(stdin);scanf(“%d”,&p1->num1);printf(“n课程名称:”);scanf(“%s”,p1->name1);printf(“n学分:”);scanf(“%d”,&p1->score);printf(“n课程人数上限:”);scanf(“%d” ,&p1->Melepeo);printf(“ntttt输入成功!”);p1->nelepeo=0;head1=NULL;while(p1->num1!=0){
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse *)malloc(sizeof(struct couse));
printf(“n-----------------------------”);
printf(“n课程编号:(输入0结束)”);scanf(“%d”,&p1->num1);printf(“n课程名称:”);scanf(“%s”,p1->name1);printf(“n学分:”);scanf(“%d”,&p1->score);printf(“n课程人数上限:”);scanf(“%d” ,&p1->Melepeo);
p1->nelepeo=0;
printf(“ntttt输入成功!”);} p2->next=NULL;intoc();}
void filec()//录入键盘子函数(从文件录入){ void intoc();
FILE * fp;
char filepath[20];
struct couse *p1,*p2;
N1=0;
printf(“输入要读入的文件路径:”);
getchar();
gets(filepath);
if((fp=fopen(filepath,“r”))==NULL)
{
printf(“找不到%s文件!n”,filepath);
exit(0);
}
p1=p2=(struct couse*)malloc(sizeof(struct couse));
fscanf(fp,“%d%s%d%d%d”,&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
head1=NULL;
while(!feof(fp))
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse *)malloc(sizeof(struct couse));
fscanf(fp,“%d%s%d%d%d”,&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
}
p2->next=NULL;
intoc();}
void inputc()//录入课程主函数 {
int i;
printf(“ttt录入课程信息n”);
printf(“n1.从键盘录入n”);
printf(“2.从文件录入n”);
printf(“3.返回主菜单n”);
printf(“请选择(1~3):n”);
scanf(“%d”,&i);
switch(i)
{
case(1):keyboardc();break;
case(2):filec();break;
case(3):system(“cls”);return;break;
//return
} }
void insertc(struct couse *incouse)//课程管理子函数(增加课程){ void intoc();
struct couse *p0,*p1,*p2;
p1=head1;
p0=incouse;
if(head1==NULL)
{
head1=p0;
p0->next=NULL;
}
else
{
while((p0->num1 > p1->num1)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num1 <= p1->num1)
{
if(head1==p1)head1=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N1=N1+1;
intoc();}
void delc(int num1)//课程管理子函数(删除课程){ void intoc();
struct couse *p1,*p2;
if(head1==NULL)
{
printf(“n没有课程,无法删除!n”);
goto end;
}
p1=head1;
while(num1!=p1->num1 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num1==p1->num1)
{
if(p1==head1)head1=p1->next;
else p2->next=p1->next;
printf(“已删除该编号课程!n”);
N1=N1-1;
}
else printf(“无该编号的课程!n”);
end:;
intoc();}
void managementc()//课程管理主函数 {
struct couse * incouse;
struct couse *p1;
int i,num1;
printf(“ttt课程管理n”);
printf(“1.新增课程n”);
printf(“2.删除课程n”);
printf(“3.返回主菜单n”);
printf(“请选择(1~3):n”);
scanf(“%d”,&i);
switch(i)
{
case(1):
{
incouse=(struct couse *)malloc(sizeof(struct couse));
printf(“n课程编号:”);
fflush(stdin);
scanf(“%d”,&p1->num1);
printf(“n课程名称:”);
scanf(“%s”,p1->name1);
printf(“n学分:”);
scanf(“%d”,&p1->score);
printf(“n课程人数上限:”);
scanf(“%d” ,&p1->Melepeo);
printf(“ntttt输入成功!”);
incouse->nelepeo=0;
insertc(incouse);
break;
}
case(2):
{
printf(“请输入要删除课程的编号:n”);
scanf(“%d”,&num1);
delc(num1);
break;
}
case(3):system(“cls”);return;break;
} }
void keyboards()//录入学生信息子函数(从键盘录入){
void intos();
int i;
struct student *p1,*p2;
N2=0;
p1=p2=(struct student *)malloc(sizeof(struct student));
printf(“n学生学号:”);
scanf(“%d”,&p1->num2);
printf(“n学生姓名:”);
scanf(“%s”,p1->name2);
p1->nelen=0;
for(i=0;i<50;i++)p1->nelenum[i]=0;
head3=NULL;
while(p1->num2!=0)
{
N2=N2+1;
if(N2==1)head3=p1;
else p2->next=p1;
p2=p1;
p1=(struct student *)malloc(sizeof(struct student));
//return
printf(“n学生学号:(输入0结束!)”);
scanf(“%d”,&p1->num2);
printf(“n学生姓名:”);
scanf(“%s”,p1->name2);
p1->nelen=0;
for(i=0;i<50;i++)p1->nelenum[i]=0;
}
p2->next=NULL;
intos();return;} void files()//录入学生信息子函数(从文件录入){
int i=0;
FILE * fp;
char filepath[20];
struct student *p1,*p2;
N2=0;
printf(“输入要读入的文件路径:”);
getchar();
gets(filepath);
if((fp=fopen(filepath,“r”))==NULL)
{
printf(“找不到%s文件!n”,filepath);
exit(0);
}
p1=p2=(struct student*)malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
head3=NULL;
while(!feof(fp))
{
i=0;
N2=N2+1;
if(N2==1)head3=p1;
else p2->next=p1;
p2=p1;
p1=(struct student *)malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
}
p2->next=NULL;}
void inputs()//录入学生信息主函数 {
int i;
printf(“nttt录入学生信息n”);
printf(“n1.从键盘录入n”);
printf(“2.从文件录入n”);
printf(“3.返回主菜单n”);
printf(“请选择(1~3):n”);
scanf(“%d”,&i);
switch(i)
{
case(1):keyboards();break;
case(2):files();break;
case(3):system(“cls”);return;break;
}
return 0;}
void inserts(struct student * incouse)//学生信息管理子函数(填加学生信息){ void intos();
struct student *p0,*p1,*p2;
p1=head3;
p0=incouse;
if(head3==NULL)
{
head3=p0;
p0->next=NULL;
}
else
{
while((p0->num2 > p1->num2)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num2 <= p1->num2)
{
if(head3==p1)head3=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
//return
p1->next=p0;
p0->next=NULL;
}
}
N2=N2+1;
intos();}
void dels(int num2)//学生信息管理子函数(删除学生信息){ void intos();
struct student *p1,*p2;
if(head3==NULL)
{
printf(“n没有该学生信息,无法删除!n”);
goto end;
}
p1=head3;
while(num2!=p1->num2 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num2==p1->num2)
{
if(p1==head3)head3=p1->next;
else p2->next=p1->next;
printf(“已删除该学生信息!n”);
N2=N2-1;
}
else printf(“无该学号的学生!n”);
intos();
end:;}
void managements()//学生信息管理主函数 {
struct student * incouse;
int i,num2;
printf(“ttt学生信息管理n”);
printf(“1.新增学生信息n”);
printf(“2.删除学生信息n”);
printf(“3.返回主菜单n”);
printf(“请选择(1~3):n”);
scanf(“%d”,&i);
switch(i)
{
case(1):
{
incouse=(struct student *)malloc(sizeof(struct student));
incouse->nelen=0;
incouse->nelenum[0]=0;
printf(“学生学号t学生姓名n”);
scanf(“%d%s”,&incouse->num2,incouse->name2);
inserts(incouse);
break;
}
case(2):
{
printf(“请输入要删除学生的学号:n”);
scanf(“%d”,&num2);
dels(num2);
break;
}
case(3):system(“cls”);return;break;
//return
} }
void elect(struct student * s)//选课 {
void intos();
struct couse * p;
int num1,i;
printf(“请输入要选课的编号:n”);
scanf(“%d”,&num1);
for(i=0;s->nelenum[i]!=0;i++);
s->nelenum[i]=num1;
(s->nelen)++;
p=head1;
while(p->num1!=num1)p=p->next;
(p->nelepeo)++;
intos();} void cheak()//学生选课子函数(查询可选课程){
char e;
struct couse * c;
struct student * s;
int num2,i,j=0,t=0;
printf(“请输入你的学号:”);
scanf(“%d”,&num2);
s=head3;
while((s->num2!=num2)&&(s->next!=NULL))s=s->next;
if(s->num2!=num2)
{
printf(“不存在你的信息,请进入主菜单录入你的信息!n”);
goto end;
}
c=head1;
printf(“你的可选课程编号:n”);
while(c!=NULL)
{
for(t=0,i=0;s->nelenum[i]!=0;i++)
{
if(c->num1==s->nelenum[i])t=1;
}
if(t==0 &&(c->nelepeo!=c->Melepeo))
{
printf(“%dn”,c->num1);
j++;
}
c=c->next;
}
if(j==0)
{
printf(“你已选完所有课程,无法再多选!n”);
goto end;
}
printf(“选课(y/n)?:n”);
getchar();
e=getchar();
i=0;
while((e=='y')||(e=='Y'))
{
elect(s);
printf(“继续选课(y/n)?:n”);
getchar();
e=getchar();
}
end:;} void back(struct student * p)//退课 {
void intos();
struct couse * p1;
int num1,i,j;
printf(“请输入你要退掉的课程编号:n”);
scanf(“%d”,&num1);
p1=head1;
while(p1->num1!=num1)p1=p1->next;
for(i=0;p->nelenum[i]!=num1;i++);
for(j=i;p->nelenum[j]!=0;j++)p->nelenum[j]=p->nelenum[j+1];
p->nelenum[--j]=0;
(p1->nelepeo)--;
printf(“退课成功!n”);
intos();} void hcheak()//学生选课子函数(查询已选课程){
char c;
struct couse * p0;
struct student * p;
int num2,i,f=0;
printf(“请输入学号:n”);
scanf(“%d”,&num2);
p=head3;
while(p->num2!=num2 && p!=NULL)p=p->next;
if(p==NULL)
{
printf(“不存在你的信息,请回主菜单录入信息:n”);
goto end;
}
printf(“已选课程编号:n”);
if(p->nelenum[0]==0)
{
printf(“你还没选课!n”);
goto end;
}
for(i=0;p->nelenum[i]!=0;i++)
{
printf(“%dn”,p->nelenum[i]);
p0=head1;
while(p0->num1!=p->nelenum[i])p0=p0->next;
f=f+p0->score;
}
printf(“总学分:%dn”,f);
printf(“是否进行退课(y/n)?”);
getchar();
c=getchar();
while((c=='y')||(c=='Y'))
{
back(p);
printf(“继续退课(y/n)?”);
getchar();
c=getchar();
(p->nelen)--;
}
end:;} void elective()//学生选课主函数 {
int i;
printf(“ttt学生选课n”);
printf(“1.查询可选课程n”);
printf(“2.查询已选课程n”);
printf(“3.返回主菜单n”);
printf(“请输入(1~3):n”);
scanf(“%d”,&i);
switch(i)
{
case(1):cheak();break;
case(2):hcheak();break;
case(3): system(“cls”);return;break;
// return
} } void listc()//输出课程信息 {
struct couse * p;
p=head1;
printf(“课程编号
课程名称
学分
课程已选人数
课程人数上限n”);
while(p!=NULL)
{
printf(“%-8d%10s%6d%8d%12dn”,p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
} }
void lists()//输出学生信息 {
struct student * p;
p=head3;
printf(“学生学号
学生姓名
已选课程数量n”);
while(p!=NULL)
{
printf(“%-4d %10s %6dn”,p->num2,p->name2,p->nelen);
p=p->next;
} } void intoc()//存储课程信息 {
FILE * fp;
struct couse * p;
char filepath[30];
if((fp=fopen(“课程信息.dat”,“a+”))==NULL)
{
printf(“n保存失败!”);
exit(0);
}
p=head1;
while(p!=NULL)
{
fprintf(fp,“%d %s %d %d %dn”,p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
}
fclose(fp);
printf(“课程信息已保存成功!n”);} void intos()//存储学生信息 { int i;
FILE * fp;
struct student * p;
char filepath[30];
if((fp=fopen(“学生信息.dat”,“a+”))==NULL)
{
printf(“n保存失败!”);
exit(0);
}
p=head3;
while(p!=NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p=p->next;
}
fclose(fp);
printf(“学生信息已保存成功!n”);
printf(“ntttt选择菜单:”);
printf(“ntttt1.继续添加ntttt2.返回主菜单:”);
printf(“请选择:”);
scanf(“%d”,&i);
switch(i)
{
case 1:inputs();break;
case 2:teacher();break;
default:printf(“n输入有误!n”);} }
void store()//信息主函数 {
int i;
printf(“tt系统信息查看及存储n”);
printf(“1.查看课程信息n”);
printf(“2.查看学生信息n”);
printf(“3.返回主菜单n”);
printf(“请输入(1~3):n”);
scanf(“%d”,&i);
switch(i)
{
case(1):listc();break;
case(2):lists();break;
case(3):system(“cls”);return;break;
} }
int main()//主函数
//retuen
{
int i;
FILE *fp;
printf(“nttt欢迎使用学生选课系统!n”);
printf(“n请选择菜单:”);
printf(“ntttt1.教师登陆ntttt2.学生登陆n”);
printf(“请选择:”);
scanf(“%d”,&i);
switch(i)
{
case 1:teacher();break;
case 2:student();break;
default:printf(“输入有误!”);
} }
int student()
{
int i;
printf(“ntttt1.学生选课n”);
printf(“ntttt2.系统信息查看及存储n”);
printf(“ntttt3.退出系统n”);
printf(“请选择:”);
scanf(“%d”,&i);
switch(i)
{
case 1:
{
system(“cls”);
elective();
break;
}
case 2:
{
system(“cls”);
store();
break;
}
default:printf(“输入有误!”);
}
}
int teacher()
{
FILE *fp;
int i;
printf(“菜单:n”);
printf(“1.录入课程信息n”);
printf(“2.课程管理n”);
printf(“3.录入学生信息n”);
printf(“4.学生信息管理n”);
printf(“5.系统信息查看n”);
printf(“6.退出系统n”);
if((fp=fopen(“课程信息.dat”,“rb”))==NULL)
{
printf(“n打开系统文件失败!
n”);
//fp=fopen(“信息.dat”,“rb”));
// }
// if(feof(fp))
// {
printf(“n还未添加课程信息,请添加课程信息!n”);
inputc();
}
while(!feof(fp))
{
emp1=(struct couse*)malloc(sizeof(struct couse));
if(emp1==NULL)
{
printf(“n分配内存失败!n”);
return;
}
fread(emp1,sizeof(struct couse),1,fp);
if(feof(fp))break;
if(head1==NULL)
{
head1=emp1;
head2=emp1;
}
else{
head2->next=emp1;
head2=emp1;
}
head2->next=NULL;
}
fclose(fp);
fp==NULL;
if((fp=fopen(“学生信息.dat”,“rb”))==NULL)
printf(“n打开系统文件失败!n”);
//
//if(feof(fp)==1)
// {
printf(“还未添加学生信息,请添加学生信息!”);
inputs();
while(!feof(fp))
{
emp1=(struct student*)malloc(sizeof(struct student));
if(emp2==NULL)
{
printf(“n分配内存失败!n”);
return;
}
fread(emp2,sizeof(struct student),1,fp);
if(feof(fp))break;
if(head3==NULL)
{
head3=emp2;
head4=emp2;
}
else{
head4->next=emp2;
head4=emp2;
}
head4->next=NULL;
}
fclose(fp);
fp==NULL;
printf(“n请输入菜单选项(1~6):n”);
scanf(“%d”,&i);
switch(i)
{
case(1):
{
system(“cls”);
inputc();
break;
}
case(2):
{
system(“cls”);
managementc();
break;
}
case(3):
{
system(“cls”);
inputs();
break;
}
case(4):
{
system(“cls”);
managements();
break;
}
case(5):
{
system(“cls”);
store();
break;
}
case(6):
{
system(“cls”);
printf(“感谢使用本系统!nn再见!n”);
}
}
return 1;
}
第三篇:C语言课程设计
C语言课程设计
飞机空战小游戏
一、实验环境
运行系统 WINDOWSXP 编程工具C++6.0 地点 程序设计与仿真实验室
桌号19电脑IP地址221.12.10.218
二、实验目的和要求 实验目的:
(1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作算法。
(2)使学生进一步掌握程序设计、编写、调试能力。(3)使学生了解软件开发的基本步骤和内容。
实验要求::飞机空战小游戏。功能要求:
1)有主菜单界面,能让用户选择开始、退出、难度等级、查看用户积分功能;
2)飞机能通过A、S、D、W或上下左右键控制移动方向,使用空格键发射子弹;
3)屏幕随机出现从上到下的敌方子弹; 4)当打中敌方子弹时,积分加1;
5)当敌方子弹打正飞机时,游戏结束,并提示用户是否保存记录(记录包括用户名及积分值),保存后退回到主菜单;
6)当选择主菜单中的“查看用户积分”选项时,进入第二级菜单,用户可查看全部用户积分记录,也可仅查看积分最高者,也可根据用户输入的用户名查看;(此处要求使用到链表,用于临时存储用户积分数据);(对链表的查找操作)
7)所有用户积分信息使用文件进行永久性保存; 8)用户选择“难度等级”,可设定游戏不同难度,难度越高,出现敌方子弹数目及间隔将增加。
三、实验内容和结果
系统总体设计:编写出c语言代码,运行程序,并调试程序,最终实现游戏的功能。本程序主要包含游戏控制函数、设置是否继续游戏函数、输出函数、子弹移动函数、敌机移动函数、设置函数、菜单函数等7个主要函数,包含了不同的功能,对原来的程序作出了很大的改进,用到的主要语句有if语句,for语句、while语句、printf语句、switch语句等等,添加了颜色函数。
系统模块设计:包含游戏控制函数、设置是否继续游戏函数、输出函数、子弹移动函数、敌机移动函数、设置函数、菜单函数等7个主要函数,其中是否继续游戏函数,菜单函数主要运用了SWITCH语句和If语句,子弹移动函数,敌机移动函数通过数组内各数值的变化来完成,设置函数主要用PRINTF和SCANF语句进行各项数值的设置,游戏控制函数使用if函数,kbhit()函数,switch函数组合控制数组中飞机进行的移动和图案的变换。最后用打印数组的方式打印出数组变换。最后运用SWITCH函数进行各项菜单内容的操作。
实验的测试和结果:
四、实验中的问题及心得
通过本次试验,使我对c语言有了更深一层次的了解,对for语句、while语句、printf语句、switch语句、颜色函数等等的了解及使用更加详细了一些,明白了这些语句的用法,明确了c语言的使用环境,功能。同时我了解到了一些方法来实现一些C语言作为一个基础性编程语言是我们在以后编程中不可或缺的语言,使用率肯定会进一步增高。掌握了c语言就相当于掌握了一门技术,同时c语言相对而言简单一些,更容易理解。自己虽然对这个小游戏进行一部分的改造,但是我也感觉这只是其中的很很小的一部分,肯定会有更加强大的功能等待着我们去改善。
同时,我也发现了自己很多的不足,需要进一步加强这一方面的学习,在数据结构链表的使用上还很欠缺,无法使用链表进行数据的读取和输入,还有在两个程序的连接上还有困难,对于头文件的理解不到位,链表的结构,定义,使用指针的方式„„这些都需要提高。这些技能的欠缺导致了在 这个小游戏中无法顺利完成有关用户名和记录的一些要求。„„
附录:程序清单
#include
void movebul(int [][N]);//子弹移动函数 void movepla(int [][N]);//敌机移动函数 void setting(void);//设置函数 void menu();//菜单 int scr[50][N]={0},pl=9,width=15,speed=16,density=40,score=0,death=0,length=18,y=0,x=5,z=15,life=1,max=0;//全局变量:界面、我机初始位、界面宽度、敌机速度、敌机密度、得分、死亡,子弹,飞机,敌机初始图案,生命
char name[N];char first[N];void main(){ menu();getch();}
void print(int a[][N])//输出函数 { int i,j;system(“cls”);for(i=0;i a[i][width-1]=4; for(j=0;j { if(a[i][j]==0)printf(“ ”); if((a[i][j]==1)&&(x<15))printf(“%c”,x);//输出我机的符号 if((a[i][j]==2)&&(z<35))printf(“%c”,z);//子弹 if((a[i][j]==3)&&(y<4))printf(“%c”,y+1);//输出敌机符号 if(i==1&&j==width-1)printf(“总积分:%d”,score);//显示得分 if(i==2&&j==width-1)printf(“已经死亡了%d 次,剩余 %d 条命”,death,life-death);//右上角显示死亡次数 if(i==3&&j==width-1)printf(“普通按键:AD控制左右飞行”); if(i==4&&j==width-1)printf(“ W 发射子弹”);if(i==5&&j==width-1)printf(“特殊按键:+-号加减敌机速度”);if(i==6&&j==width-1)printf(“ /*号单列敌机密度减小增大(均有限制)”); if(i==7&&j==width-1)printf(“VIP按键:X键变化飞机图案,Y键变化敌机图案”); if(i==8&&j==width-1)printf(“tZ键变化子弹图案,P键增加生命(均有限制)”); if(i==9&&j==width-1)printf(“注意:向下移动后按其他方向键飞机显现”); } printf(“n”);} } void movebul(int a[][N]){ int i,j;for(i=0;i { if(i==0&&a[i][j]==2) a[i][j]=0; if(a[i][j]==2) { if(a[i-1][j]==3)//加分 { score+=1; printf(“7”); } a[i][j]=0,a[i-1][j]=2; } } } void movepla(int a[][N]){ int i,j;for(i=length-1;i>=0;i--)//从最后一行往上是为了避免把敌机直接冲出数组。 for(j=0;j if(i==length-1&&a[i][j]==3) a[i][j]=0;//消除敌机,在最低层 if(a[i][j]==3)a[i][j]=0,a[i+1][j]=3;//敌机移动 } if(a[length-2][pl]==3&&a[length-1][pl]==1)death++;//死亡 } void continuegame()//继续游戏 { printf(“用户%s”,name);printf(“你的得分是%dn”,score);if(score==0)printf(“tttt 恭喜你刷新了最低记录na”,score);if((score>0)&&(score<20)) printf(“tttt 回家再练 练吧na”,score);if(score>19) printf(“tttt 你真厉害 na”,score);printf(“游戏结束n”);printf(“按y键继续游戏,空格键退出游戏(y/n)?n”);printf(“ttt”);switch(getch())//是否要继续游戏 { case 'y': case 'Y':system(“cls”),death=0,score=0,life=1,x=5,y=0,z=15;menu();break;} } void setting(void)//设置函数 { system(“cls”);//清屏 printf(“n 输入游戏界面的大小(默认3):1-10 ”);scanf(“%d”,&width);width=(width+1)*5;printf(“n 请输入敌机密度大小(默认3):1-5 ”);scanf(“%d”,&density);density=(7-density)*10;printf(“n 输入敌机的飞行速度大小(默认3):1-10 ”);scanf(“%d”,&speed);speed=(11-speed)*2;printf(“n 输入我机的生命(默认1):1-100 ”);scanf(“%d”,&life);printf(“n 输入飞机的图案(默认1):1-2 ”);scanf(“%d”,&x);x=x+4;printf(“n 输入子弹的图案(默认1):1-10 ”);scanf(“%d”,&z);z=z+14;printf(“n 输入敌机的图案(默认1):1-3 ”);scanf(“%d”,&y);y=y-1;} void run(){ int i=0,j=0,k=0,b=0;printf(“请输入用户名:”);scanf(“%s”,name);printf(“您的用户名是:%s”,name);if(getch()==27)setting();printf(“游戏说明:按AWSD控制我机左右飞行,空格键发射子弹n特殊按键:-号敌机减速,+号敌机加速n特殊按键:/号单列敌机密度减小,*号单列敌机密度增大n”);printf(“VIP按键:X键变化飞机图案,Y键变化敌机图案ntZ键变化子弹图案,P键增加生命n”);printf(“任意键开始游戏,esc键进入游戏设置n”);printf(“游戏时也可更改游戏设置任意键开始nn”);system(“color a”);//设置背景颜色 if(getch()==27)setting();scr[length-1][pl]=1;//我方飞机初始位置 scr[0][5]=3;while(death { if(kbhit()) switch(getch())//控制设置按键 { case 'a': case 'A':if(pl>0) scr[length-1][pl]=0,scr[length-1][--pl]=1;break; case 'd': case 'D':if(pl scr[length-1][pl]=0,scr[length-1][++pl]=1;break;case 'W': case 'w':if(length>10) { scr[length-1][pl]=0,scr[length-2][pl]=1; length=length-1; };break; case '+':if(speed>2) { speed=speed-2; };break; case '-':speed=speed+1;break;case '*':if(density>5) { density=density-5; };break; case '/':density=density+10;break; case 'l':if(width<40) { width=width+2; };break; case 's':if(length<30) { scr[length-1][pl]=0; length=length+1; scr[length-1][pl]='5'; };break; case ' ':scr[length-2][pl]=2;break; case 'y':y=(y+1)%4;break; case 'x':x=(x)%2+5;break; case 'z':if(z<25) { z=z+1; } else z=15;break; case 'p':life=life+1;break;} if(++j%density==0)//控制生产敌机的速度 { j=0; srand(time(NULL));//产生随机数 scr[0][rand()%width]=3; scr[rand()%3][rand()%(width+2)]=3; scr[rand()%2][rand()%(width+1)]=3; scr[rand()%4][rand()%(width+4)]=3;//生成随机敌方飞机 } if(++i%speed==0)//控制敌机移动速度,相对于子弹移动速度 movepla(scr);//飞机移动 movebul(scr);//子弹移动 print(scr);//绘制游戏画面 } if(score>=max){ max=score; for(i=0;i { name[i]=first[i]; } } if(score score=score;} continuegame();getch();} void menu(){ printf(“n1:游戏设置n2:游戏说明n3:开始游戏n4:查看用户信息n5:退出游戏n”); switch(getch()){ case '1': setting();menu();break; case '2':printf(“游戏说明:按AWSD控制我机左右飞行,空格键发射子弹n特殊按键:-号敌机减速,+号敌机加速n特殊按键:/号单列敌机密度减小,*号单列敌机密度增大n”);printf(“VIP按键:X键变化飞机图案,Y键变化敌机图案ntZ键变化子弹图案,P键增加生命n”);printf(“ 任意键开始游戏,esc键进入游戏设置n”);printf(“ 游戏时也可更改游戏设置”);menu();break; case '3':run();menu();break; case '4':seerecord();menu();break; case '5':exit(0);break;default:menu();break;} } seerecord(){ printf(“最高纪录为%s,%d”,first[N],max);} 前言 让自己所学的知识应用于实际生活中,理论联系生活,学以致用,我们将更好服务于民。我们是新一代的年轻人,要想将来在社会上更好的立足,就必须让自己强大起来,努力的学习新东西,了解新事物,跟上时代的步伐,这样我们才能与时俱进,不被社会所淘汰。C语言在大学里是一门很重要的课程,也是一门很实用的课程,学好C语言在当今的信息时代是一个很好的敲门砖。而且,我们是电子信息工程专业的,更应该学好C语言,这对我们以后走向社会有很大的帮助,为我们以后大学毕业去求职提升竞争力。从C语言产生到现在,它已经成为最重要和最流行的编程语言之一。在各种流行编程语言中,都能看到C语言的影子,如Java的语法与C语言基本相同。学习、掌握C语言是每一个计算机技术人员的基本功之一。C语言具有高级语言的强大功能,却又有很多直接操作计算机硬件的功能(这些都是汇编语言的功能),因此,C语言通常又被称为中级语言。学习和掌握C语言,既可以增进对于计算机底层工作机制的了解,又为进一步学习其他高级语言打下了坚实的基础。需求分析 当今社会是信息社会,谁的信息越快速越准确,谁就会更好的生活在这个社会上,他的人生也将走向成功。信息业正在21世纪扮演着越来越重要的角色,也是中国十二五规划中的重要一环,因此,我们应该努力的去学习好这门课程,力争在以后的生活工作中大展身手。现在的社会日新月异,各种信息在不断的传递交流,谁最先获取了信息谁就会成功。所以,作为我们这类专业的人才,在毕业以后一定会大显身手,实现自己的人生价值。 2.1 课程设计目的 本课程设计为信息类公共课《计算方法与程序设计》配套的课程设计。是该课程的理论学习的延伸。通过本课程设计有助于锻炼综合运用C语言相关知识设 为1;若n大于1,则开始循环运算(见图3.22流程图),直到i小于n不成立时结束循环。在循环运算的过程中,要调用两个函数即函数pit1和函数pit2(见图3.23流程图)。在调用函数pit1和函数pit2中,这两个函数进行相互递归调用。最后将调用函数pit1和pit2的值返回主函数main函数中,再输出高能质子数目t3和低能质子数目t4。 3.1 系统流程图 程序一系统流程图(如图3.11所示): 开始输入nt1=3,t2=1,i=1否n==0否是n==1是否i 3.2主要模块的流程图 程序一模块流程图如图3.21所示: 否i 图3.21流程图 程序二模块流程图如图3.22和图3.23所示: i=1否i 图3.22流程图 } {t3=3*t1+2*t2;t4=t1+t2;t1=t3;t2=t4;} printf(“n the high=%d the low=%dn”,t3,t4); 程序代码4.1 程序二代码如下所示: #include “stdio.h” int pit1(int a){ if(a==1) } int pit2(int b){ if(b==1) } main(){ int n,i,t3,t4;printf(“n input n”);scanf(“%d”,&n);if(n==0){ return(1);return(pit1(b-1)+pit2(b-1));else return(3);return(3*pit1(a-1)+2*pit2(a-1));else 图5.11 程序二运行结果:如图5.12(程序运行时,当输入时间变量n是3时,输出高能粒子是41,低能粒子是15。) 图5.12 参考文献 [1 ]张福祥.C语言程序设计[M].辽宁大学出版社,2008.[2] 张福祥,王萌.C语言程序设计习题解答与实验实训.沈阳:辽宁大学出版社,2008. [3] 牛莉,刘远军等.计算机等级考试辅导教程[M].北京:中国铁道出版社,2008. [4]李勇帆,谢兵.大学计算机应用教程.北京:中国铁道出版社,2009. [5]田淑清.全国计算机等级考试二级教程.北京:高等教育出版社,2011. [6]杨振山,龚沛曾.大学计算机基础.北京:高等教育出版社,2006. [7]卢湘鸿.信息技术应用基础.北京:高等教育出版社,2004. 致 谢 在这次课程设计的撰写过程中,我得到了许多人的帮助。首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。同时也感谢学院为我提供良好的做毕业设计的环境。最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。 C语言与数据结构课程设计报告 学 号 2014014083 姓 名 汪明 课程设计题目 通讯录的制作 2016 年 1 月 目 录 需求分析 1.1 功能与数据需求 1.1.1 题目要求的功能 1.1.2 扩展功能 1.2 界面需求 1.3 开发环境与运行需求 2 概要设计 2.1主要数据结构 2.2程序总体结构 2.3各模块函数说明 3 详细设计 3.1算法分析与设计 3.2主要程序段设计 4 测试 5 使用说明 5.1应用程序功能的详细说明 5.2应用程序运行环境要求 5.5输入数据类型、格式和内容限制 6 总结提高 6.1课程设计总结 6.2开发中遇到的问题和解决方法 6.3 对自己完成课设完成情况的评价 6.4《C语言与数据结构课程设计》课程的意见与建议 附录:程序源代码 需求分析 1.1 功能与数据需求 1)输入信息--enter();2)显示信息---display();3)查找以姓名作为关键字---search();4)删除信息---delete();5)存盘---save();6)装入---load(); 1.2 界面需求 1)每条信息至包含 :姓名(NAME)街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项;电话号码(TEL); 2)作为一个完整的系统,应具有友好的界面和较强的容错能力; 3)需要链表实现; 4)上机能正常运行。 1.3 开发环境 开发环境: 测试系统:Windows7,开发工具:Dev-C++ 概要设计 2.1主要数据结构 //构建链表的结构体 typedef struct CLUB { char NAME[20];//姓名 char STREET[20];//街道 char CITY[20];//城市 char STATE[20];//国家 char PHONE[20];//电话号码 char EIP[10];//邮编 struct CLUB *next;}CLUB;CLUB *headLink; 2.2程序总体结构 //主要函数 void Enter(CLUB *t);//录入 void Search(void);//查找 void Display(void);//输出输入的所有信息 void Delete(void);//删除信息 void Save(void);//保存 void Load(void);//从文件中的内容 //界面函数 void Menu(void);//显示菜单 2.2各模块函数说明 void CreateHeadLink(void);//创建 void Load(void);//从文件中的内容 void Menu(void);//显示菜单 void InsertOneNode(CLUB *t);//增加新结点 CLUB *MallocNode(void);//申请一个新结点,并将其初始化 void Enter(CLUB *t);//输入 void InsertOneNode(CLUB *t);//在链表的结尾处增加一个结点 void Search(void);//查找 void DesplayOneNode(CLUB *t);//输出一个结点的信息 void Display(void);//输出输入的所有信息 void Delete(void);//删除信息 void ChangeInforByName(void);//修改信息 void Save(void);//保存 详细设计 3.1算法分析与设计 Enter函数:从键盘中获得数据,通过scanf将各数据放入对应的链表中 Display函数:将链表中的数据输出 3.2主要程序段设计测试 使用说明 5.1应用程序功能的详细说明 先输入联系人的基本信息,可以显示录入的所有联系人的信息,可以将联系人的信息保存到CLUB.txt,当第二次运行时可以直接从CLUB.txt文件中调用 5.2应用程序运行环境要求 5.5输入数据类型、格式和内容限制 6 总结提高 6.1课程设计总结 6.2开发中遇到的问题和解决方法 6.3 对自己课程设计完成情况的评价 附录:程序源代码 #include char STREET[20];//街道 char CITY[20];//城市 char STATE[20];//国家 char PHONE[20];//电话号码 char EIP[10];//邮编 struct CLUB *next;}CLUB;CLUB *headLink;//链表表头指针 void CreateHeadLink(void);//创建 void Load(void);//从文件中的内容 void Menu(void);//显示菜单 void InsertOneNode(CLUB *t);//增加新结点 CLUB *MallocNode(void);//申请一个新结点,并将其初始化 void Enter(CLUB *t);//输入 void InsertOneNode(CLUB *t);//在链表的结尾处增加一个结点 void Search(void);//查找 void DesplayOneNode(CLUB *t);//输出一个结点的信息 void Display(void);//输出输入的所有信息 void Delete(void);//删除信息 void ChangeInforByName(void);//修改信息 void Save(void);//保存 int choose;//用于接收用户的选择 //主函数 int main(){ int j;system(“color 3E”);printf(“nnnnnnnnnn”);printf(“ttt %c ”,1);printf(“欢迎进入通信录!nn”);printf(“正在进入,请等候”);for(j=0;j<6;j++){ Sleep(300);printf(“.”);} system(“cls”); CreateHeadLink();Menu();} //函数功能:从文件中读信息 void Load(void){ FILE *fp;CLUB *p;p=(CLUB *)malloc(sizeof(CLUB));headLink=p;p->next=NULL;fp=fopen(“CLUB.txt”,“r”);if(!fp){ printf(“文件不存在n”);return;} p=MallocNode();while(fscanf(fp,“%s%s%s%s%s%sn”,p->NAME,p->STREET,p-> CITY,p->STATE,p->PHONE ,p->EIP)>0){ InsertOneNode(p);p=MallocNode();} fclose(fp);} //函数功能:显示菜单,根据用户的输入完成相应的功能 void Menu(void){ CLUB *p;printf(“nt|***********欢迎使用通信录信息管理系统****************|n”);printf(“t提示:为保证您的操作得到保存,请按正常顺序退出系统^_^n”);printf(“tt+------------主菜单---------------+n”);printf(“tt+ [1]******显示电话簿信息 +n”);printf(“tt+ [2]按姓名查找电话簿信息 +n”);printf(“tt+ [3]******录入电话簿信息 +n”);printf(“tt+ [4]******删除电话簿信息 +n”);printf(“tt+ [5]按姓名修改电话簿信息 +n”);printf(“tt+ [6]**保存所有电话簿信息 +n”);printf(“tt+ [7]装入文件中电话簿信息 +n”);printf(“tt+ [0]****************退出 +nn”);printf(“请输入指令:”);scanf(“%d”,&choose);//取得用户的选择 switch(choose){ case 1: Display();//显示所有电话簿的信息 Sleep(2000);system(“cls”);break;case 2: Search();//按姓名查找信息 Sleep(2000);system(“cls”);break;case 3: //录入新信息 p=MallocNode();//先申请一个新结点 Enter(p);//要求用户输入信息到新结点中 InsertOneNode(p);//将新结点加到链表中 Sleep(2000);system(“cls”);break;case 4: Delete();//删除电话簿信息 Sleep(2000);system(“cls”);break;case 5: ChangeInforByName();//按姓名修改电话簿信息 Sleep(2000);system(“cls”);break;case 6: Save();//保存 Sleep(2000);system(“cls”);break;case 7: Load();//装入 Display();Sleep(2000);system(“cls”);break;case 0: Save();//保存数据后再退出 free(headLink);exit(1);break;default: } break;} Menu();//递归调用 // 函数功能:建立链表表头 void CreateHeadLink(void){ CLUB *p;p=(CLUB *)malloc(sizeof(CLUB));headLink=p;p->next=NULL;} // 函数功能:增加新结点 void InsertOneNode(CLUB *t){ CLUB *p;p=headLink;while(p->next){ p=p->next;} p->next=t;} //函数功能:申请一个新结点,并将其初始化 CLUB *MallocNode(void){ CLUB *p;int i;p=(CLUB*)malloc(sizeof(CLUB));if(p==NULL)return NULL;for(i=0;i<20;i++)p->NAME[i]=' '; for(i=0;i<20;i++)p->STREET[i]=' '; for(i=0;i<10;i++)p->CITY[i]=' '; for(i=0;i<20;i++)p->STATE[i]=' '; for(i=0;i<20;i++)p->PHONE[i]=' '; for(i=0;i<20;i++)p->EIP[i]=' '; p->next=NULL;} return p;//函数功能:录入电话簿信息 void Enter(CLUB *t){ } printf(“请输入姓名: n”);scanf(“%s”,t->NAME);printf(“请输入街道信息:n”);scanf(“%s”,t->STREET);printf(“请输入城市信息:n”);scanf(“%s”,t->CITY);printf(“请输入国家信息:n”);scanf(“%s”,t->STATE);printf(“请输入电话号码:n”);scanf(“%s”,t->PHONE);printf(“请输入邮编信息:n”);scanf(“%s”,t->EIP);//函数功能:在链表的结尾处增加一个结点 void InsertOneNode(void){ CLUB *p;p=headLink;while(p->next){ p=p->next;} p->next=p;} //函数功能:根据用户输入的姓名显示电话簿的信息 void Search(void){ CLUB *p;char NAME[20];char flag=0;p=headLink->next;printf(“请输入要查询的姓名信息:n”);scanf(“%s”,NAME);while(p){ if(strcmp(p->NAME,NAME)==0){ printf(“n 姓名t街道t城市t国家t电话号码t邮编n”);DesplayOneNode(p);flag=1;break;} p=p->next;} if(!flag)} printf(“对不起,不存在姓名为 %s 的电话簿信息n”,NAME);//函数功能:输出一个结点的信息 void DesplayOneNode(CLUB *t){ printf(“%st”,t->NAME);printf(“%st”,t->STREET);printf(“%st”,t->CITY);printf(“%st”,t->STATE);printf(“%st”,t->PHONE);printf(“%st”,t->EIP);printf(“nt”);} //函数功能:显示所有电话簿的信息 void Display(void){ CLUB *p;p=headLink->next;if(p==NULL){ printf(“现在没有电话簿信息,请先输入电话簿信息nn”);return;} printf(“n”);printf(“nt姓名t街道t城市t国家t电话号码t邮编ntnt”);while(p){ DesplayOneNode(p);p=p->next;} p=NULL;} //函数功能:根据用户输入的姓名删除 void Delete(void){ char NAME[20];CLUB *p,*q;char flag=0;printf(“请输入要删除的姓名信息:”);scanf(“%s”,NAME);p=headLink;q=headLink->next;while(q){ if(strcmp(q->NAME,NAME)==0){ p->next=q->next;free(q);flag=1;break;} p=p->next;q=q->next;} if(!flag){ } printf(“不存在该姓名的信息n”);return;} printf(“成功删除n”);//函数功能:根据输入的姓名修改电话簿信息 void ChangeInforByName(void){ CLUB *p;char NAME[20];char flag=0;p=headLink->next;printf(“请输入姓名:n”);scanf(“%s”,NAME);while(p){ if(strcmp(p->NAME,NAME)==0){ printf(“请输入新的街道信息:n”);scanf(“%s”,&p->STREET);printf(“请输入新的电话号码:n”);scanf(“%s”,&p->PHONE);printf(“修改成功n”);break;} } p=p->next;} // 函数功能:保存链表数据到文件中 void Save(void){ CLUB *p;FILE *fp;p=headLink->next;if(p==NULL){ } printf(“现在没有电话簿信息,请先输入电话簿信息nn”);return;} fp=fopen(“CLUB.txt”,“w+”);if(!fp){ printf(“文件不存在n”);return;} while(p){ fprintf(fp,“%st%st%st%st%st%sn”,p->NAME,p->STREET,p-> CITY,p->STATE,p->PHONE,p->EIP);p=p->next;} fclose(fp);第四篇:C语言课程设计
第五篇:C语言与数据结构课程设计报告要求