第一篇:通信工程C语言课程设计报告
通信工程C语言强化训练实验报告
学 号:
4090710 姓 名: 张亮 提交日期: 成 绩: 评 语:
教师签字:
东北大学秦皇岛分校计算机工程系
6.26
通信工程C语言强化训练实验报告
学生信息管理程序
1、强化训练目的
a)C语言基本知识的巩固和综合运用。基本数据类型、基本控制结构、数组、指针、函数、结构体和共用体。
b)C语言高级编程。链表基本操作、文件的基本操作、图形和声音制作。c)程序的结构化设计。
d)编辑、设置、编译、调试、执行。e)C语言结合实际问题的综合设计。
2、设计题目功能
对学生信息进行管理,能够完成学生信息的增、删、改、查找等功能。
数据文件名40607.dat。
学生信息至少包括学号、姓名、性别、出生日期、宿舍号等基本信息。
3、设计题目要求
1有主界面和主菜单
2以班级为单位用链表存放学生信息
3可以实现按学号、姓名、宿舍号查询和统计并在屏幕上输出查询结果 4友好的界面和操作提示
[A]信息录入 [D]信息删除 [F]信息查询 [Q]退出
4、程序流程图
—— 2 ——
通信工程C语言强化训练实验报告
5.主要代码
#include
#include
#include
#define LEN sizeof(STUDENT)
typedef struct stu /*定义结构体数组用于缓存数据*/ {char num[6];char name[5];int score[3];int sum;
float average;int order;
struct stu *next;}STUDENT;
/*函数原型*/
STUDENT *init();/*初始化函数*/ int menu_select();/*菜单函数*/ STUDENT *create();/*创建链表*/
void print(STUDENT *head);/* 显示全部记录*/ void search(STUDENT *head);/*查找记录*/
STUDENT *mydelete(STUDENT *head);/*删除记录*/ STUDENT *sort(STUDENT *head);/*排序*/
STUDENT *insert(STUDENT *head,STUDENT *mynew);/*插入记录*/ void save(STUDENT *head);/*保存文件*/ STUDENT *load();/*读文件*/
/*主函数界面*/ void main()
{STUDENT *head,mynew;
head=init();/*链表初始化,使head的值为NULL*/ for(;;)/*循环无限次*/ {switch(menu_select()){
case 1:head=create();break;case 2:print(head);break;case 3:search(head);break;
case 4:head=mydelete(head);break;case 5:head=sort(head);break;
case 6:head=insert(head,&mynew);break;/*&mynew表示返回地址*/ case 7:save(head);break;
—— 3 ——
通信工程C语言强化训练实验报告
case 8:head=load();break;
case 9:exit(0);/*如菜单返回值为9则程序结束*/ } } }
/*初始化函数*/ STUDENT *init(){
return NULL;/*返回空指针*/ }
/*菜单选择函数*/ menu_select(){int n;
printf(“n按任一键进入主菜单......npress any key to enter the menu......”);/*按任一键进入主菜单*/ getch();/*从键盘读取一个字符,但不显示于屏幕*/ system(“cls”);
printf(“********************************************************************************n”);
printf(“tt 欢迎 Welcome ton”);
printf(“nttt 使用学生管理系统1.0nntttttn”);
printf(“*************************************MENU***************************************n”);
printf(“ttt1.输入学生成绩记录 Enter the recordn”);/*输入学生成绩记录*/ printf(“ttt2.显示 Print the recordn”);/*显示*/
printf(“ttt3.寻找 Search record on namen”);/*寻找*/ printf(“ttt4.删除 mydelete a recordn”);/*删除*/
printf(“ttt5.排序 Sort to make mynew a filen”);/*排序*/ printf(“ttt6.插入 Insert record to listn”);/*插入*/ printf(“ttt7.保存 Save the filen”);/*保存*/ printf(“ttt8.读取 Load the filen”);/*读取*/ printf(“ttt9.退出 Quitn”);/*退出*/
printf(“********************************************************************************n”);do{
printf(“nttt输入你的选择Enter your choice(1~9):”);scanf(“%d”,&n);
}while(n<1||n>9);/*如果选择项不在1~9之间则重输*/
return(n);/*返回选择项,主函数根据该数调用相应的函数*/ }
/*输入函数*/
STUDENT *create(){int i,s;
STUDENT *head=NULL,*p;/* 定义函数.此函数带回一个指向链表头的指针*/ system(“cls”);for(;;)
—— 4 ——
通信工程C语言强化训练实验报告
{p=(STUDENT *)malloc(LEN);/*开辟一个新的单元*/ if(!p)/*如果指针p为空*/
{printf(“n输出内存溢出.Out of memory.”);/*输出内存溢出*/ return(head);/*返回头指针,下同*/ }
printf(“输入学号Enter the num(0:list end):”);scanf(“%s”,p->num);
if(p->num[0]=='0')break;/*如果学号首字符为0则结束输入*/ printf(“输入名字Enter the name:”);scanf(“%s”,p->name);
printf(“请输入3门成绩Please enter the %d scoresn”,3);/*提示开始输入成绩*/ s=0;/*计算每个学生的总分,初值为0*/ for(i=0;i<3;i++)/*3门课程循环3次*/ { do{
printf(“成绩score%d:”,i+1);scanf(“%d”,&p->score[i]);
if(p->score[i]<0 || p->score[i]>100)/*确保成绩在0~100之间*/ printf(“数据错误,请重新输入 Data error,please enter again.n”);}while(p->score[i]<0 || p->score[i]>100);s=s+p->score[i];/*累加各门成绩*/ }
p->sum=s;/*将总分保存*/
p->average=(float)s/3;/*先用强制类型转换将s转换成float型,再求平均值*/ p->order=0;/*未排序前此值为0*/
p->next=head;/*将头结点做为新输入结点的后继结点*/ head=p;/*新输入结点为新的头结点*/ }
return(head);}
/* 显示全部记录函数*/ void print(STUDENT *head){int i=0;/* 统计记录条数*/ STUDENT *p;/*移动指针*/ system(“cls”);
p=head;/*初值为头指针*/
printf(“n************************************STUDENT************************************n”);
printf(“-----------------n”);printf(“| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |n”);
printf(“-----------------n”);while(p!=NULL){ i++;
printf(“| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|n”,i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);p=p->next;
—— 5 ——
通信工程C语言强化训练实验报告
}
printf(“-----------------n”);
printf(“**************************************END**************************************n”);}
/*查找记录函数*/
void search(STUDENT *head){STUDENT *p;/* 移动指针*/
char s[5];/*存放姓名用的字符数组*/ system(“cls”);
printf(“请输入个姓名来查找.Please enter name for searching.n”);scanf(“%s”,s);
p=head;/*将头指针赋给p*/
while(strcmp(p->name,s)&& p!= NULL)/*当记录的姓名不是要找的,或指针不为空时*/ p=p->next;/*移动指针,指向下一结点*/ if(p!=NULL)/*如果指针不为空*/
{printf(“n*************************************FOUND************************************n”);
printf(“-----------------n”);printf(“| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |n”);
printf(“-----------------n”);printf(“| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|n”,p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf(“-----------------n”);
printf(“***************************************END**************************************n”);} else
printf(“n没有该学生 There is no num %s student on the list.n”,s);/*显示没有该学生*/ }
/*删除记录函数*/
STUDENT *mydelete(STUDENT *head){int n;
STUDENT *p1,*p2;/*p1为查找到要删除的结点指针,p2为其前驱指针*/ char c,s[6];/*s[6]用来存放学号,c用来输入字母*/ system(“cls”);
printf(“请输入要删除的学号 Please enter the mydeleted num: ”);scanf(“%s”,s);
p1=p2=head;/*给p1和p2赋初值头指针*/
while(strcmp(p1->num,s)&& p1!= NULL)/*当记录的学号不是要找的,或指针不为空时*/ {p2=p1;/*将p1指针值赋给p2作为p1的前驱指针*/ p1=p1->next;/*将p1指针指向下一条记录*/ }
if(strcmp(p1->num,s)==0)/*学号找到了*/
{printf(“**************************************FOUND************************************n”);
printf(“-----------------n”);
—— 6 ——
通信工程C语言强化训练实验报告
printf(“| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |n”);
printf(“-----------------n”);printf(“| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|n”,p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);printf(“-----------------n”);
printf(“***************************************END**************************************n”);
printf(“n是否要删除,输入Y删除,N则退出nAre you sure to mydelete the student Y/N ?”);/*提示是否要删除,输入Y删除,N则退出*/ for(;;)
{scanf(“%c”,&c);
if(c=='n'||c=='N')break;/*如果不删除,则跳出本循环*/ if(c=='y'||c=='Y'){
if(p1==head)/*若p1==head,说明被删结点是首结点*/ head=p1->next;/*把第二个结点地址赋予head*/ else
p2->next=p1->next;/*否则将一下结点地址赋给前一结点地址*/ n=n-1;
printf(“n学号为(Num): %s 学生以被删除(student have been mydeleted.)n”,s);printf(“别忘了保存.Don't forget to save.n”);break;/*删除后就跳出循环*/ } } } else
printf(“n没有这个学生在表上nThere is no num %s student on the list.n”,s);/*找不到该结点*/ return(head);}
/*排序函数*/
STUDENT *sort(STUDENT *head){int i=0;/*保存名次*/
STUDENT *p1,*p2,*t,*temp;/*定义临时指针*/
temp=head->next;/*将原表的头指针所指的下一个结点作头指针*/ head->next=NULL;/*第一个结点为新表的头结点*/ while(temp!=NULL)/*当原表不为空时,进行排序*/ {
t=temp;/*取原表的头结点*/
temp=temp->next;/*原表头结点指针后移*/ p1=head;/*设定移动指针p1,从头指针开始*/
p2=head;/*设定移动指针p2做为p1的前驱,初值为头指针*/
while(t->average
average&&p1!=NULL)/*作成绩平均分比较*/ {
p2=p1;/*待排序点值小,则新表指针后移*/ p1=p1->next;}
if(p1==p2)/*p1==p2,说明待排序点值大,应排在首位*/ {
—— 7 ——
通信工程C语言强化训练实验报告
t->next=p1;/*待排序点的后继为p*/ head=t;/*新头结点为待排序点*/ }
else /*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/ {
t->next=p1;/*t的后继是p1*/ p2->next=t;/*p2的后继是t*/ } }
p1=head;/*已排好序的头指针赋给p1,准备填写名次*/ while(p1!=NULL)/*当p1不为空时,进行下列操作*/ {
i++;/*结点序号*/
p1->order=i;/*将结点序号赋值给名次*/ p1=p1->next;/*指针后移*/ }
printf(“排序成功 Sorting is sucessful.n”);/*排序成功*/ return(head);}
/*插入记录函数*/
STUDENT *insert(STUDENT *head,STUDENT *mynew){STUDENT *p0,*p1,*p2;int n,sum1,i;
p1=head;/*使p1指向第一个结点*/ p0=mynew;/*p0指向要插入的结点*/
printf(“nPlease enter a mynew record.n”);/*提示输入记录信息*/ printf(“输入学号Enter the num:”);scanf(“%s”,mynew->num);
printf(“输入名字Enter the name:”);scanf(“%s”,mynew->name);
printf(“Please enter the %d scores.n”,3);sum1=0;/*保存新记录的总分,初值为0*/ for(i=0;i<3;i++){ do{
printf(“成绩score%d:”,i+1);scanf(“%d”,&mynew->score[i]);
if(mynew->score[i]>100||mynew->score[i]<0)
printf(“数据错误Data error,please enter again.n”);}while(mynew->score[i]>100||mynew->score[i]<0);sum1=sum1+mynew->score[i];/*累加各门成绩*/ }
mynew->sum=sum1;/*将总分存入新记录中*/ mynew->average=(float)sum1/3;mynew->order=0;
if(head==NULL)/*原来的链表是空表*/
{head=p0;p0->next=NULL;} /*使p0指向的结点作为头结点*/
—— 8 ——
通信工程C语言强化训练实验报告
else
{while((p0->average
average)&&(p1->next!=NULL)){p2=p1;/*使p2指向刚才p1指向的结点*/ p1=p1->next;/*p1后移一个结点*/ }
if(p0->average>=p1->average)
{if(head==p1)head=p0;/*插到原来第一个结点之前*/ else p2->next=p0;/*插到p2指向的结点之后*/ p0->next=p1;} else
{p1->next=p0;p0->next=NULL;} /*插到最后的结点之后*/ }
n=n+1;/*结点数加1*/
head=sort(head);/*调用排序的函数,将学生成绩重新排序*/
printf(“n学生Student %s 已被更新have been inserted.n”,mynew->name);printf(“不要忘了保存Don't forget to save the mynew file.n”);return(head);}
/*保存数据到文件函数*/ void save(STUDENT *head)
{FILE *fp;/*定义指向文件的指针*/ STUDENT *p;/* 定义移动指针*/ char outfile[10];
printf(“输出文件例如:c:score Enter outfile name,for example c:scoren”);scanf(“%s”,outfile);
if((fp=fopen(outfile,“w”))==NULL)/*为输出打开一个二进制文件,为只写方式*/ {
printf(“打不开文件Cannot open the filen”);return;/*若打不开则返回菜单*/ }
printf(“n保存中...Saving the file......n”);p=head;/*移动指针从头指针开始*/ while(p!=NULL)/*如p不为空*/ {
fwrite(p,LEN,1,fp);/*写入一条记录*/ p=p->next;/*指针后移*/ }
fclose(fp);/*关闭文件*/
printf(“保存成功....Save the file successfully!n”);}
/* 从文件读数据函数*/ STUDENT *load()
{STUDENT *p1,*p2,*head=NULL;/*定义记录指针变量*/ FILE *fp;/* 定义指向文件的指针*/ char infile[10];
printf(“倒入文件例如:c:score Enter infile name,for example c:scoren”);
—— 9 ——
通信工程C语言强化训练实验报告
scanf(“%s”,infile);
if((fp=fopen(infile,“r”))==NULL)/*打开一个二进制文件,为只读方式*/ {
printf(“打不开文件Can not open the file.n”);return(head);}
printf(“n寻找文件...Loading the file!n”);
p1=(STUDENT *)malloc(LEN);/*开辟一个新单元*/ if(!p1){
printf(“内存溢出!Out of memory!n”);return(head);}
head=p1;/*申请到空间,将其作为头指针*/ while(!feof(fp))/*循环读数据直到文件尾结束*/ {
if(fread(p1,LEN,1,fp)!=1)break;/*如果没读到数据,跳出循环*/ p1->next=(STUDENT *)malloc(LEN);/*为下一个结点开辟空间*/ if(!p1->next){
printf(“Out of memory!n”);return(head);}
p2=p1;/*使p2指向刚才p1指向的结点*/
p1=p1->next;/*指针后移,新读入数据链到当前表尾*/ }
p2->next=NULL;/*最后一个结点的后继指针为空*/ fclose(fp);
printf(“n你成功的从文件中读取了数据!nYou have success to read data from the file!n”);return(head);}
—— 10 ——
通信工程C语言强化训练实验报告
—— 11 ——
通信工程C语言强化训练实验报告
—— 12 ——
通信工程C语言强化训练实验报告
6、强化训练心得体会
首先要感慨一下,这是我编的最长的一个程序,从开始拿到这个程序时候的迷茫、一无所知,到最后能够运行处这个程序,可谓经历了很多,但也感受到了那份成功后的欣然。在进行编程之前,首先复习一下c语言课本,回想起那些基本知识,然后根据题意的具体要求,看需要哪些基本原理,并将整体思路想一遍。
在编写程序的过程中,也犯了许多错误,没有该犯与不该犯,反正都犯了!这也是在提醒我,做事一定要仔细认真,并且一定要有耐心,我们小组成员在一次又一次的修改,一次又一次的运行之后,终于把这个程序运行成功。在这期间,也让我体会到,实践和自己在书上编程序,存在一定的差距,这也就是实践的意义所在,增强我们的动手能力,增强我们在临场的思考能力,和应变能力!
在此期间我们也产生了团队默契,增强了团队合作能力,这一点让我终生受益!同时也让我温故一下c语言知识,让我对他不会感觉陌生,例如:数组与指针的应用。与此同时也让我学会了许多新的知识,可谓受益匪浅。
—— 13 ——
通信工程C语言强化训练实验报告
—— 14 ——
第二篇:C语言课程设计报告
C语言课程设计报告
班
级:
10电子本1
学
号:
10303033122
姓
名:
指导老师:
方文森
完成日期:
温州大学城市学院课程设计
目 录
1、课程设计目的和要求.....................................................................................................2
2、课程设计任务内容.........................................................................................................2
3、详细设计说明.................................................................................................................3
3.1分析.........................................................................................................................3 3.2软件设计.................................................................................................................3 3.3软件调试(对编程中的错误进行记录,并给出你的解决办法).....................3
4、软件使用说明.................................................................................................................4
5、课程设计心得与体会.....................................................................................................4 附录1:参考文献................................................................................................................5 附录2:部分程序清单(带有较详细的注释)................................................................5
温州大学城市学院课程设计
C语言课程设计报告
1、课程设计目的和要求
目的:(1)巩固和加深学生对C语言课程的基本知识的理解和掌握(2)掌握C语言编程和程序调试的基本技能(3)利用C语言进行基本的软件设计(4)掌握书写程序设计说明文档的能力(5)提高运用C语言解决实际问题的能力 要求:(1)分析课程设计题目的要求(2)写出详细设计说明
(3)编写程序代码,调试程序使其能正确运行(4)设计完成的软件要便于操作和使用(5)设计完成后提交课程设计报告
2、课程设计任务内容
1)一个班级有4个学生,共学习5门课程(大学英语、高等数学、C语言程序设计、VB程序设计、大学语文)。要求编写程序完成相应功能。2)
输入并保存]5门课程名称;
3)
输入并保存]4个学生的学号及其[个人相关信息]; 4)
输入并保存]每个学生对应的每门课程成绩; 5)求出每门功课的平均分;
6)找出有两门以上功课不及格的学生,输出他们的学号和全部课程成绩及该学生5门课程的平均成绩;
7)找出平均成绩在90分以上或者全部课程成绩在85分以上的学生,输出他们的学号和全部课程成绩及该学生5门课程的平均成绩;
8)计算每位学生的总分,并按总分进行排名,按由高到低输出他们的学号及总成绩; 9)对前面问题进行优化,即在一维数驵的基础上,考虑采用二维数组、函数及其参数传递的方式来解决相关问题;
10)对前面问题进行优化,在学号的基础上,增加学生的其它个人信息,包括:学号、姓名、年龄、性别,并采用结构体形式加以表示; 11)利用文件实现对输入及分析输出数据的存取操作。
12)参照教材P27页,3-11题引入选择功能,输入功能编号可以实现以上功能(考虑清屏函数,自查)。
温州大学城市学院课程设计
3、详细设计说明
3.1分析
3.2软件设计
开始菜单(功能选择)Key=?Key=1Key=2Key=3Key=4Key=5Key=0Key=99Key=6Key=7Key=8Key=9Key=10写入课程名读取课程名输入学生信息读取学生信息建立了学生信息及课程名称?退出程序读取课程、学生、成绩读取课程成绩输出功课的平均分两门以上功课不及格的学生输出高分的学生总分由高到低排序No保存保存Yes输入课程成绩(提示)必须输入课程名称、学生信息才能建立成绩保存清屏
3.3软件调试(对编程中的错误进行记录,并给出你的解决办法)
取地址。
温州大学城市学院课程设计
4、软件使用说明
1.2.3.4.5.6.7.8.9.10.11.12.[99]读取课程、学生、成绩 [1]输入课程名称.[2]读取课程名称.[3]输入学生信息.[4]读取学生信息.[5]输入课程成绩.[6]读取课程成绩.[7]功课的平均分.[8]两门以上功课不及格的学生 [9]-高分的学生-.[10]学生总分排序.[0]退出应用程序.5、课程设计心得与体会
在大家的共同努力下,忙碌了两个星期,我们顺利完成了对此程序的编译及试运行。在设计程序的过程中,我们了解到要设计一个完整的程序,其中最难的可能就属设计整个程序的框架,其中可能会需要经过很多次的修改与调试,所以必须要有耐心,直至最后设计出自己想要的程序。
另外平时学习c语言的基础也很关键,因为如果平时学得就不怎么样,那么你面对这么一个比较有难度的程序,可能会望而却步,看懂他人的程序都是个难点,更别说让自己去设计。为了解决此类问题,最好就是多向同学,老师请教,查找资料。
设计一个程序的过程就是解决一个实际问题的过程,从解决实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;在次我们必须捋清思路,逐一的解决问题的各个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。
感谢这次的课程设计,它使我更加深刻地体会到c语言程序编写过程的严谨与细致,还有就是无论做任何事都要有耐心。当然团队合作也是非常重要的一个环节,这会使你在学习过程中倍感轻松
总的来说,这次程序设计让我获益匪浅,对C语言也有了进一步的认识:C语言功能高、表达能力强、使用灵活方便、目标程序效率高等等。C语言是在国内外广泛使用的一种计算机语言,相信除了以上优点,还有许多我们还未发现,希望能在以后的学习中有更深入的认
温州大学城市学院课程设计
识。
附录1:参考文献
《C语言程序设计与实践教程》
附录2:部分程序清单(带有较详细的注释)
#include
#define N 4 #define M 5 #define Debug 1
typedef struct { char SNo[5];char SName[10];}Student;
void ScoreRead(float Score[][M],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i 温州大学城市学院课程设计 void ScoreWrite(float Score[][M],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i void CoureseRead(char Cname[][20],char FileName[],char FileType[]){ FILE *fp;int i,j;char ch;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} i=0;j=0;while(1){ ch = fgetc(fp);if(ch==EOF)break;if(ch=='n'){ Cname[i][j]=' ';i++;j=0;6 温州大学城市学院课程设计 } else { Cname[i][j]=ch;j++;} } #if(Debug==1)for(i=0;i void CoureseWrite(char Cname[][20],char FileName[],char FileType[]){ FILE *fp;int i,j;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} for(i=0;i