c语言程序设计报告(共27页).docx
《c语言程序设计报告(共27页).docx》由会员分享,可在线阅读,更多相关《c语言程序设计报告(共27页).docx(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上C语言课程设计报告 题目: 成绩管理系统 专业年级:自动化一班 学号: 姓名: 指导教师: 叶念渝2015年12月17日专心-专注-专业一.设计内容(1)输入功能:由键盘输入20个学生(姓名)的某门课程 的学习成绩1099分(也可超过)。(2)运算功能:将分数由低到高排序(用直接排序法和冒泡法),并显示学生姓名和对应的分数。(3)检索功能:用线性搜索法检索某个学生的成绩(输入姓名,显示成绩)。(4)查询功能:对分搜索法检索某个学生的成绩(输入姓名,显示成绩)。二.设计要求(1)可以输入若干名学生信息(包括姓名/成绩等);(2)在源代码中将若干名同学的信息输出;(3)在
2、源代码中能够将若干名同学的成绩排序(升序/降序均可);(4)可以根据不同的查询条件(线性/对分搜索)来查询到相关学生的信息;三.设计思路首先进入软件界面,以菜单为提示的成绩管理系统.分别建立输入学生信息函数输入学生信息,建立排序函数实现排序功能,建立查找函数实现查找功能.通过建立数组在函数运行中进行同步调换实现各信息间分联系,达到信息相对应的目的,在主函数中分别调用各功能函数完成程序目的.四.程序设计流程图子程序入口1.学生信息输入函数i=0;i1&Scorei100重新输入请重新输入yes输入完毕退出子程序2.直接排序法流程图子程序入口 i=0;iN-1;i+max=iscoremaxsco
3、rejYNmax=j同步交换姓名和成绩输出姓名和成绩输入完毕退出子程序3.冒泡排序法流程图子程序入口 ii=0;iN-j;i+ /1.输入函数 /学生信息输入函数void input1(char nameN8,int score) int i;for(i=0;iN;i+) printf (n 请输入第%d个学生姓名:,i+1); scanf(%s,&namei); printf (n 请输入第%d个学生成绩:,i+1); scanf(%d,&scorei);dowhile(scorei100)printf(输入有误!n);printf(请重新输入成绩:); scanf(%d,&scorei);
4、while(scorei100); getchar();/2.成绩排序输出(直接排序法)void sort1(char nameN8,int score)int i,j,max,temp1;char temp2100;for(i=0;iN-1;i+) max=i;for (j=i+1;jN;j+)if(scoremaxscorej) max=j;temp1=scorei;scorei=scoremax;scoremax=temp1;strcpy(temp2,namei); /字符串复制函数strcpy()strcpy(namei,namemax);strcpy(namemax,temp2);p
5、rintf(The sorted result:n);for(i=0;iN;i+)printf(姓名:%10s 成绩:%3dn,namei,scorei);/3.成绩排序输出(冒泡法)void sort2(char nameN8,int score) int i,j,t; char h100; for(j=0;jN;j+) for(i=0;iscorei+1) t=scorei; scorei=scorei+1; scorei+1=t; strcpy(h,namei); strcpy(namei,namei+1); strcpy(namei+1,h); printf(The sorted re
6、sult:n);for(i=0;iN;i+)printf(姓名:%10s 成绩:%3dn,namei,scorei);/4.线性搜索法检索学生的成绩void search1(char nameN8,int score) /定义线性搜索法函数 getchar();int a,i;char b; char str8;while(1) printf(请输入学生的姓名:); gets(str); for(i=0;iN;i+) a=strcmp(str,namei);if(a=0)break; if(a!=0) printf(查无此人!); else if(a=0) printf(姓名:%10s 成绩:
7、%3dn,namei,scorei); getchar(); printf(继续查询吗Y/N:); b=getchar(); getchar(); if(b=y)|(b=Y) continue; elsebreak; /5.对分搜索法检索学生的成绩void search2(int score,char nameN8) int a,b,c,i;char d; while(1)a=0;b=N-1;printf(请输入学生成绩:);scanf(%d,&c);getchar();while(a=b) i=(a+b)/2; if(scorei=c)break; if(scoreic)b=i-1;if(s
8、corei!=c)printf(无此成绩n);else printf(姓名:%10s 成绩:%3dn,namei,scorei); printf(继续查询吗Y/N:); d=getchar(); if(d=y)|(d=Y) continue; elsebreak;void main()int scoreN;char nameN8;int a,b; printf( * 学生成绩管理系统 *n); printf( * 1.输入学 生 信息 *n); printf( * 2.直 接 排 序 法 *n); printf( * 3.冒 泡 排 序 法 *n); printf( * 4.线 性 搜 索 法
9、 *n); printf( * 5.对 分 搜 索 法 *n); b=1;while(b=1)printf(请输入序号 :);scanf(%d,&a); printf(n);switch(a) case 1: printf(输入学生信息n ); input1(name,score); break; case 2: printf(直 接 排 序 法n ); sort1(name,score); break; case 3: printf(冒 泡 排 序 法n ); sort2(name,score); break; case 4: printf(线 性 搜 索 法n ); search1(nam
10、e,score); break; case 5: printf(对 分 搜 索 法n ); search2(score,name); break; case 6:while(0);break; default: printf(errorn);printf(1 继续程序,2结束程序n);scanf(%d,&b);jscorei+1名字分数同步进行交换输出姓名和成绩交换完毕退出子程序4.线性搜索法流程图子程序入口输入姓名a!=0如果a=strcmp(str,namei)a是否等于0如果a=0 输出姓名和成绩输出“查无此人” 是否继续YN输入完毕退出子程序5.对分搜索法流程图子程序入口调用排序函数对
11、成绩进行排序a=0;b=n-1acscoreicscorei=ca=i+1a=i-1scorei=cNY输出“无此成绩” 输出查找的人的信息Y继续查找输入完毕退出子程序主程序入口6. 主程序case(1-6)N 进入相应的分函数界面输入完毕退出5 设计及调剂的过程中遇到的问题和解决方法 (1).输入人的姓名时为什么要用二维数组?因为输入了多个人的名字所以我们要建立一个名字的二维数组。 (2).在输入函数中我开始用的是if语句定义输入范围结果只提示一次错误。后来我加了一个do-while循环,就可以一直执行下去了。 (3).在冒泡排序法中没有理解strcpy函数的用法把字符串复制到字符串中去了,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 报告 27
限制150内