C语言毕业课程设计(电子版)_第1页
C语言毕业课程设计(电子版)_第2页
C语言毕业课程设计(电子版)_第3页
C语言毕业课程设计(电子版)_第4页
C语言毕业课程设计(电子版)_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言课程设计报告ExperimentDesigningreporter课程名称:C语言课程设计英文名称:CProgramExperimentDesigning专业:交通工程+软件工程08学号:姓名:指导教师:日期:2009年6月8日至2009年619日大连交通大学软件学院《C语言课程设计》报告CProgramExperimentDesigning课程编号: 学时:40学时适用专业:软件工程专业授课单位:软件学院C语言课程设计目的及要求目的:根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容;通过调试典型例题或习题积累调试C程序的经验;通过完成辅导教材中的编程题,逐渐培养学生的编程能力、用计算机解决实际问题的能力。要求:熟悉TurboC的编程环境、主要菜单功能。通过上机验证运算符、表达式、运算规则、函数使用。熟练使用C语言的典型语句编写简单程序。调试典型例题或习题。提高上机编程能力实验类型设计类型实验学时40学时实验设备微型计算机、WINDOWS98XP以上版本的操作系统、TurboC2.0软件一套XPC语言课程参考教材:1.C语言程序设计清华大学出版社马靖善主编与大纲保持一致最好与大纲保持一致最好2.谭浩强.C语言程序设计(第三版).北京:高等教育出版社,2002

课程设计(报告)任务书任务及要求:设计(研究)内容和要求研究内容:投票选举、计算并按序输出学生平均成绩及总分、字符串排序、统计单词、学生成绩管理系统任务和要求:(1).学习C语言基础知识,掌握C语言编程和程序调试的基本技能。(2).对指导教师下达的题目进行系统分析。(3).根据分析结果完成系统设计。(4).编程:在计算机上实现题目的代码实现。(5).完成对该系统的测试和调试。(6).提交课程设计报告。(7).指标:要求完成课程设计报告3千字以上(约二、三十页).完成若干综合性程序设计题目,每个综合设计题目的语句行数的和在300行语句以上.2.原始依据了解C语言的基础知识,有一定的语言编程基础,能够熟练运用C语言进行程序设计。通过用C语言完成的题目,提高用C语言解决实际问题的能力。3.参考文献[1]黄明等.C语言程序设计辅导教材.大连理工大学出版社,2006[2]马靖善等.C语言程序设计.清华大学出版社,2005[3]谭浩强.C语言程序设计(第二版).北京:高等教育出版社,20022008年6月20日目录C语言课程设计报告 1[1]黄明等.C语言程序设计辅导教材.大连理工大学出版社,2006 31统计选票 11.1系统分析 11.2设计说明 11.3程序运行截图 21.4 源程序代码 22成绩输出 32.1功能说明 32.2设计说明 32.3程序运行截图 42.4源程序代码 43字符串排序 53.1功能说明 53.2设计说明 53.3程序运行截图 63.4源程序代码 64统计单词 74.1功能说明 74.2设计说明 74.3程序运行截图 84.4源程序代码 85学生成绩管理系统 95.1需求分析 95.2总体设计 105.3详细设计与实现 125.3程序运行截图 151统计选票[格式:标题2,黑体,3号]1.1系统分析统计候选人的选票。1.2设计说明1、定义:#include"string.h"2、子函数,输入候选人。函数名:structperson返回值:候选人的序号,姓名参数:intnum;charname[20];intcount;处理流程:定义候选人3、主函数main()从键盘上输入一候选人,for循环输入选票,若选票与候选人匹配,增加票数,最后统计最终的票,选出候选人。如:lilizhaozhaozhaoliliwangwangzhangzhangzhangzhaolili,则在屏幕上显示:=================================Theresultis:li7zhang2zhao3wang3****thangyouforyouvote****1.3程序运行截图源程序代码#include"string.h"/*统计4候选人的得票情况*/structperson{charname[20];intcount;}leader[]={"li",0,"zhang",0,"zhao",0,"wang",0};main(){inti,j;charselect[20];clrscr();printf("========================================================\n");printf("****voteforourleader****\n\n\n");for(i=0;i<15;i++){printf("%d\tPleaseinputyourresult:",i+1);scanf("%s",select);for(j=0;j<4;j++){if(strcmp(leader[j].name,select)==0)leader[j].count++;}}printf("Theresultis:\n");for(j=0;j<4;j++)printf("%s\t%d\n",leader[j].name,leader[j].count);printf("\n\n\n****thankyouforyourvote****\n");printf("====================================================");getch();printf("***************************\n");}2成绩输出2.1功能说明根据提示输入学生姓名年龄和成绩,求出总成绩和平均值2.2设计说明1、定义:#include"stdio.h"2、子函数,求出总成绩及平均值。函数名:floataver(floata[])返回值:av,求出成绩平均值参数:inti,含义:数字Floatav,s=a[],含义:数组处理流程:For循环求出平均值3、主函数main()从键盘上输入成绩,调用结构数组,输入成绩,然后调用子函数floataver(floata[])如:==============================================WelcometothesystemPleaseinputyourname:LilyPleaseinputyourage:19Pleaseinputyourscore:8998789664***********************conclusion**********************Name:LilyAge:19Score1:89.000000score2:98.000000score3:78.000000Score4:96.000000score5:64.000000Final:sum=425ave=85.0000002.3程序运行截图2.4源程序代码#include"stdio.h"main(){structstudent{charname[10];intage;floatscore[5],ave;}stu;inti,sum;sum=0;stu.ave=0;printf("==============================================================\nwelcometothesystem\n");printf("\nPleaseinputyourname:");scanf("%s",);printf("\nPleaseinputyourage:");scanf("%s",&stu.age);printf("\nPleaseinputyourscore:");for(i=0;i<5;i++){scanf("%f",&stu.score[i]);sum=sum+stu.score[i];stu.ave+=stu.score[i]/5.0;}printf("\n\n************************conclusion**************************");printf("\n\nName:%s\n\n",);printf("Age:%d\n\n",stu.age);for(i=0;i<5;i++)printf("Score%d:%2.lf",i+1,stu.score[i]);printf("\n\nFinal:sum=%d",sum);printf("average=%6.lf\n",stu.ave);printf("\n\n===============================================================");getch();}3字符串排序[格式:标题2,黑体,3号]3.1功能说明统计三个字符串中的元素,并按从小到大的顺序排列3.2设计说明1、定义:#include"stdio.h"#include"string.h"#defineM3#defineN202、主函数main(),根据提示从键盘上输入字符串,然后用strcmpt统计字符串长度,根据长度不同,运用for循环和复制函数strcpy,重新排列字符串如:Pleaseinputthefirststring:hahahahahaPleaseinputthesecondstring:hiPleaseinputthethirdstring:nihaoTheresultis:Thefirst:hiThesecond:nihaoThethird:hahahahaha3.3程序运行截图3.4源程序代码#include"stdio.h"#include"string.h"#defineM3#defineN20main(){charstr[M][N],temp[N];inti,j;for(i=0;i<M;i++){printf("pleaseinputnumber%dstring:",i+1);scanf("%s",&str[i]);}printf("======================================================");printf("Before:\n");for(i=0;i<M;i++)printf("the%dstring:%s\n",i+1,str[i]);for(j=0;j<M-1;j++){for(i=0;i<M-j-1;i++)if(strcmp(str[i],str[i+1])>0){strcpy(temp,str[i]);strcpy(str[i],str[i+1]);strcpy(str[i+1],temp);}}printf("After:\n");for(i=0;i<M;i++)printf("thenumber%dstring:%s\n",i+1,str[i]);printf("=======================================================");getch();}4统计单词4.1功能说明统计字符串中的单词数量4.2设计说明1、定义:#include“stdio.h”2、主函数main()定义变量,运用for语句循环统计字符串中单词的数量如:输入Thelittleboyisverysmart则屏幕上显示:Thereare6wordsintheline.4.3程序运行截图4.4源程序代码#include"stdio.h"main(){charstr[80],c,i;intword,num;num=1;printf("=======================================");printf("\nPleaseinputaline:\n");gets(str);for(i=0;(c=str[i])!='\0';i++){if(c=='')word=0;elseif(word==0){word=1;num++;}}printf("\n\neare%dwordsintheline.\n",num);printf("=======================================");getch();}5学生成绩管理系统建立学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高办学效益和现代化水平。帮助广大教师提高工作效率,实现学生成绩信息管理工作流程的系统化规范化和自动化。利用单链表结构实现学生成绩管理,了解数据管理的基本功能,掌握C语言中的结构体,指针,函数文件操作等知识,是一个C语言知识的综合应用。5.1需求分析需求分析是软件开发中最重要的环节,它直接影响着项目的成功与失败。通过对用户需求进行调查分析,写出需求分析的文档。需求分析的文档可以作为项目设计的基本要求,也可以作为系统分析员进行系统分析和测试人员进行软件测试的手册。1.需求概述设计一个学生成绩管理系统,使之能提供以下功能:(1)信息录入功能(2)信息查询功能(3)信息删除功能(4)信息修改功能(5)信息浏览功能2.需求说明(1)系统中的每个信息包含学生的学号,姓名,课程成绩,平均成绩等。(2)录入的信息要以文件或其他形式保存,并可以进行查询、修改、删除和浏览等基本操作。(3)系统中的信息显示要求有一定的规范格式。(4)对系统中的信息修改应分别按照学号或姓名两种方式进行查询,要求能返回所有符合条件的信息。(5)对系统中的信息修改应该逐个的进行,一个信息记录的修改不应影响其他的信息记录。(6)所设计的系统应以菜单方式工作,应为用户提供清晰的使用提示,根据用户的选择进行各种处理,并要求要此过程中能尽可能地兼容使用中的异常情况。5.2总体设计根据需求分析的文档可以,初步提出问题的解决方案,以及软件系统的体系结构和数据结构的设计方案,并写出总体设计说明书,为详细设计做准备。1.功能模块根据需求分析,得到系统的功能模块。如图1-1所示:图1-1系统模块图说明:(1)菜单选择模块完成用户命令的接收功能。是学生成绩管理系统的入口,用户想要进行的各种操作都要在此模块中选择,并进而调用其他模块实现相应的功能。(2)成绩录入模块用于完成成绩的输入功能。输入的信息包括学号、姓名、课程成绩等数据,且每一项输入有误时用户能直接修改。(3)成绩删除模块用于完成成绩的删除功能,用户根据个人的需求,输入所要删除的记录,系统将执行该程序,并输出删除后剩余的原有存储信息。(4)成绩查询模块完成成绩查询功能。可以按照序号和姓名两种方式进行,并输出符合条件的信息。(5)成绩处理模块完成成绩的排序,计算总分和平均分的功能。(6)成绩插入模块完成成绩的插入功能。该模块和成绩删除模块可以完成成绩的修改功能。(7)成绩保存模块完成成绩保存到文件的功能。2.数据结构本系统中主要的数据结构就是学生的成绩信息,包含学号、姓名、三门课程成绩、总分、平均分等。 3.程序流程 系统的执行应从系统菜单的选择开始,根据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择做出判断及异常处理。系统的流程图如图1-2所示:图1-2程序流程图5.3详细设计与实现在总体设计的基础上进行详细设计,为下一步编码做准备。数据结构#defineN3typedefstructsl/*定义课程门数,可以根据情况而定*/{charno[11];/*学号*/charname[20];/*学生姓名*/intscore[N];floatsum/*总分*/floataverage;/*平均分*/intorder;/*名次*/structsl*next;/*指向后继结点的指针*/}STUDENT/*定义结构体类型*/2.各个功能模块的处理流程2.各个功能模块的设计与实现(1)菜单的设计与实现本系统设计了友好且功能丰富的主菜单界面,提供打11项功能的选择。利用switchcase语句来实现调用主菜单函数,返回值整数作开关语句的条件。值不同,执行的函数不同,具体函数如下:head=init()实现对数据执行初始化;head=create()创建链表,进行数据录入;head=delete(head)删除记录;print(head)显示全部记录;search(head)查找记录;save(head)保存文件;head=load()读文件;computer(head)计算总分和平均分;head=insert(head)插入记录;head=sort(head)排序;exit(0)(2)数据录入当在主菜单中输入了字符1时,进入创建链表函数-create(),即输入学生信息,按照提示信息输入学号(字符串不超过5位)、姓名(字符串不超过10位)、三门课程的成绩(整数0~100),每输入一个数就按一下回车键,当在输入学号首字符为@时结束输入,返回主函数,单链表创建完毕。当成绩输入后,系统自动计算该生的总分和平均分,并将名次数据先置0,待排序后再赋予新值。数据输入后,将其后继结点指针指向当前头结点,新头指针指向新插入结点,这样新插入结点总在头。数据输入结束后返回链表的头指针到主函数。(3)删除数据删除指定学号的学生记录,使用delete()函数实现。首先输入要删除结点的学号,输入后根据学号顺序查找结点,如果没找到,则输出没找到信息;否则,显示找到的结点信息,按任意键后显示已删除信息。注意删除结点时的操作,如果该结点是首结点,则要修改头指针;否则,将该结点的前趋指针的后继指向其后继结点,然后释放该结点。(4)显示数据学生成绩表建立好后,更频繁的操作是显示和查找记录,print()函数实现显示链表数据功能。由于单链表只能采取顺序访问的方法,所以定义一个指向结点的临时变量p,初值为单链表的头指针,输出指针所指记录的数据后,将指针后移一个记录,直到p指针值为空,则所有记录输出完毕。设计本函数时注意输出格式以二维表格的形式输出,直观漂亮。输出的第一列为记录号。注意调整格式,对齐表格线。(4)查找数据按照姓名查找结点,使用search()函数实现。从头结点开始顺序查找,成功则显示记录信息,失败,显示没找到。学号是字符串,比较功能利用字符串比较函数strcmp()实现。(6)保存数据到文件将学生成绩信息保存到指定文件中,使用save()函数实现。按照文件读写要求,先定义一个指向文件的指针,输入要保存的磁盘文件名,如果输入的是绝对路径,则文件保存到指定位置;如果只给文件名,则文件保存在TurboC默认的路径下,然后确定文件的打开方式,打开文件;若文件打不开,则退出程序,否则选择一种写文件方式,从链表的头指针开始,顺序将记录写入文件,直到所有记录写完,标志就是移动指针为空。(7)从文件中读取数据从文件中读取数据使用load()函数实现。按照文件读写要求,先定义一个指向文件的指针,输入要读入数据的磁盘文件名,然后确定文件的打开方式。如果文件打不开,则退出函数,否则选择一种读文件方式,从文件头开始,将记录读入内存,直到文件尾。文件打开方式和读入方式的确定要依据输出文件的打开方式和写入方式,以免数据读入错误。如果输出文件是二进制文件,块写操作,读入也应设置为二进制打开方式,块读取方式。每读入一条记录,都要做好指针链接关系,本函数将新结点链接到当前链表的尾部,链表的顺序和文件保存的顺序一致。(8)计算学生的总分和所有课程平均分计算学生的总分和所有课程平均分使用computer()函数实现。从头指针开始,每读一条记录,将该生的总分累加,并统计记录条数,当所有数据处理完毕,求出平均分,最后输出结果为所有学生的总分和平均分。(9)插入数据插入结点需要输入插入位置和新结点信息,使用insert()函数实现。输入某个结点的学号,新结点将插入在这个指定结点之前。申请空间得到指针info,输入新结点信息,存放到新申请的空间中。(10)成绩排序对于学生成绩管理,一个很重要的运算是将学生按照分数由高到低排名,sort()函数实现按照总分排序功能,先从原表删除头结点,然后在新表中查找到合适的位置,进行插入。待排序结点的插入位置总是插在表头、表尾和表中间三种情况之一,由于单链表的特性,实际插入结点时,并不需要移动和交换结点信息,而是只改变指针关系,所以排序时间主要用在比较上。排好序后将其名次数据写入数据域order中。(11)退出5.3程序运行截图进入主菜单1.成绩录入2.从表中删除记录3.显示单链表中所有记录(7)记录保存为文件4.按学号查找记录5.将单链表中记录保存到文件6.从文件中读取记录7.计算所有学生总分和平均分8.插入记录到列表9.排序5.5参考程序#include"stdio.h"#include"stdlib.h"#include"string.h"#include"conio.h"#include"mem.h"#include"ctype.h"#include"alloc.h"#defineN5typedefstructs1{charno[11];charname[15];intscore[N];floatsum;floataverage;intorder;structs1*next;}STUDENT;menu(){char*menu[]={"*****MENU******","0.Initiallist","1.Enterrecord","2.Deletearecordfromlist","3.Printlist","4.Searchrecordonnumber","5.Saveasfile","6.Loadfromfile","7.Computethescore","8.Insertrecordtolist","9.Sorttomakenewfile","10Quit"};chars[3];intc,i;gotoxy(1,25);printf("pressanykeyentermenu...\n");getch();clrscr();gotoxy(1,1);textcolor(YELLOW);textbackground(BLUE);gotoxy(10,2);putch(0xc9);for(i=1;i<44;i++)putch(0xcd);putch(0xbb);for(i=3;i<20;i++){gotoxy(10,i);putch(0xba);gotoxy(54,i);putch(0xba);}gotoxy(10,20);putch(0xc8);for(i=1;i<44;i++)putch(0xcd);putch(0xbc);window();clrscr();for(i=0;i<10;i++){gotoxy(10,i+1);printf("%s",menu[i]);}textbackground(BLACK);window();gotoxy(10,21);do{printf("\nEnteryouchoice(0~10:)");scanf("%s",s);c=atoi(s);}while(c<0||c>10);returnc;}STUDENT*init(){returnNULL;}STUDENT*create(){inti;ints;STUDENT*h=NULL,*info;for(;;){info=(STUDENT*)malloc(sizeof(STUDENT));if(!info){printf("\nOutofmemory");returnNULL;}inputs("Pleaseenterstudent'snumber:",info->no,11);if(info->no[0]=='@')break;inputs("Pleaseenterstudent'sname:",info->name,15);printf("PleaseinputMath,Chinese,English,physics,chemistryscore\n");s=0;for(i=0;i<N;i++){do{printf("Score%d:",i+1);scanf("%d",&info->score[i]);if(info->score[i]>100||info->score[i]<0)printf("baddata,repeatinput\n");}while(info->score[i]>100||info->score[i]<0);s=s+info->score[i];}info->sum=s;info->average=(float)s/N;info->order=0;info->next=h;h=info;}return(h);}inputs(char*prompt,char*s,intcount){charp[255];do{printf(prompt);scanf("%s",p);if(strlen(p)>count)printf("\ntoolong!\n");}while(strlen(p)>count);strcpy(s,p);}voidprint(STUDENT*h){inti=0;STUDENT*p;clrscr();p=h;printf("\n\n\n*************************StudentScores*********************************\n");printf("Rec|StuNu|Name|Math|Chin|Engl|phys|chem|Sum|Ave|order|\n");printf("|----|||-----|-----|-----|-----|-----|||-----|\n");while(p!=NULL){i++;printf("|%3d|%-5s|%-8s|%4d|%4d|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",i,p->no,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],p->sum,p->average,p->order);p=p->next;}printf("**************************************End**********************************\n");}STUDENT*delete(STUDENT*h){STUDENT*p,*q;chars[11];clrscr();printf("pleasedeletedno\n");scanf("%s",s);q=p=h;while(strcmp(p->no,s)&&p!=NULL){q=p;p=p->next;}if(p==NULL)printf("\nlistno%sstudent\n",s);else{printf("*********************************havefound*************************\n");printf("|no|nme|sc1|sc2|sc3|sc4|sc5|sum|ave|order|\n");printf("|------|-|-----|-----|-----|-----|-----||-----|-----|\n");printf("|%-5s|%-8s|%4d|%4d|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p->no,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],p->sum,p->average,p->order);printf("***********************************end*******************************\n");getch();if(p==h)h=p->next;elseq->next=p->next;free(p);printf("\nhavedeletedNo%sstudent\n",s);printf("Don'tforgetsave\n");}return(h);}voidsearch(STUDENT*h){STUDENT*q;chara;clrscr();printf("pleaseenterstudent'snoforsearch\n");scanf("%s",a);q=h;while(strcmp(q->no,a)&&q!=NULL)q=q->next;if(q==NULL)printf("nlistno%dnumber\n",a);else{printf("\n\n**************************havefound****************************\n");printf("|no|name|sc1|sc2|sc3|sc4|sc5|sum|ave|order|\n");printf("|------||----|----|----|----|----|||-----|\n");printf("|%-5s|%-8s|%4d|%4d|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",q->no,q->name,q->score[0],q->score[1],q->score[2],q->score[3],q->score[4],q->sum,q->average,q->order);printf("****************************end*********************************\n");}}STUDENT*insert(STUDENT*h){STUDENT*p,*q,*info;chars[11];ints1,i;printf("pleaseenterlocationbeforethenumber\n");scanf("%s",s);printf("\npleaseenternewrecord\n");info=(STUDENT*)malloc(sizeof(STUDENT));if(!info){printf("\noutofmemory");returnNULL;}inputs("pleaseenterstudent'snumber:",info->no,11);inputs("pleaseenterstudent'sname:",info->name,15);printf("pleaseinput%dscore\n",N);s1=0;for(i=0;i<N;i++){do{printf("Score%d:",i+1);scanf("%d",&info->score[i]);if(info->score[i]>100||info->score[i]<0)printf("baddata,repeatinput\n");}while(info->score[i]>100||info->score[i]<0);s1=s1+info->score[i];}info->sum=s1;info->average=(float)s1/N;info->order=0;info->next=NULL;p=h;q=h;while(strcmp(p->no,s)&&p!=NULL){q=p;p=p->next;}if(p==NULL)if(p==h)h=info;elseq->next=info;elseif(p==h){info->next=p;q->next=info;}printf("\n----haveinserted%sstudent----\n",info->name);printf("----Don'tfogetsave--\n");return(h);}voidsave(STUDENT*h){FILE*fp;STUDENT*p;charoutfile[10];printf("Enteroutfilename,forexamplec:\\f1\\te.txt:\n");scanf("%s",outfile);if((fp=fopen(outfile,"wb"))==NULL){printf("cannotopenfile\n");exit(1);}printf("\nSavingfile...\n");p=h;while(p!=NULL){fwrite(p,sizeof(STUDENT),1,fp);p=p->next;}fclose(fp);printf("----savesuccess\n");}STUDENT*load(){STUDENT*p,*q,*h=NULL;FILE*fp;charinfile[10];printf("Enterinfilename,forex

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论