C语言课程设计报告
设计题目:
专 业:
班 级:
学 号:
姓 名:
任课老师:
时间:
目录
一、 课程设计题目及所涉及知识点
二、 课程设计思路及设计流程图
三、 课程设计中遇到的难点及解决办法
四、 小结
五、 附录原程序
2
一、 课程设计题目及所涉及知识点
(一).课程设计题目:
(1).基本内容:
学生信息包括学生号、姓名、性别、出生年月、数学、英语、计算机、体育(学生号不重复)。试设计一学生信息管理系统,使之能提供以下功能: 系统以菜单方式工作,密码登陆。
1.学生信息的录入(增加数据)。用数组数据类型赋初值的方法把学生信息送到 各个数组中(但要注意是合法数据),然后把它们输出显示。
2.学生信息的删除(删除数据)。任意输入一位学生号,将它所有的信息从 组数中删除。
3.学生信息的浏览(查找数据)。任意输入一位学生号,打印出他的所有数 据。要求能多次查找。
4.学生信息的修改(修改数据)。任意输入一位学生号,打印出所有相关 信息后,可对某一项信息进行修改并保存。
5.学生信息的计算并排序。计算所有学生的总分及平均分,将包括所有数据的数组元素按总分从高到低的顺序排序打印出来。
(2). 课程设计的要求与数据
1.编程时,设计函数来完成每个功能,通过main函数调用各函数。
2.程序中的输入输出要加提示说明。
3.打印出的程序清单,在各行后用中文加说明。
4.输出的结果要准确、清晰、美观。
(二).所涉及知识点:
结构体数组的定义与引用;函数的定义与调用;局部变量和全局变量;多函数的链接与编译;for循环语句;if语句;break语句;格式输入与输出;冒泡排序法;字符串处理函数;函数的定义;数组作为函数参数.
二、课程设计思路及设计流程图
1、课程设计思路
根据题目的要求,需要一个主程序main()和四个子程序:分别为add()、del()、sort()、change()、average();可以实现增加,删除,查找,修改,求和、平均值及排序。
3
2、课程设计流程图
流程图一
4
流程图二 Add()
5
流程图三
Sort()
6
流程表四
Del
7
流程表五
Change()
8
流程表六
Average()
9
三、课程设计中遇到的难点及解决办法
1 结构体数组的定义:
当在结构体中有float型数据时系统会提示错误。
解决方法:用其他变量代替然后再定义。
2密码不能隐藏:
用gets输入密码后,密码能够看到;
解决方法:用getch代替gets,再用for循环输入*号;
3在调试没运行完自动跳出到主界面;
解决方法:是由于系统问题,在遇到float型数据时会出现系统错误。 4变量未定义而先使用。
5不同类型的指针混用。
6不知道如何使型参于实参一一对应。
7在调试程序是出现死循环。
8在进行链接是出错;
解决方法:看变量是否一直,看型参以实参是否对应。
9不知道如何使用main函数调用其他子函数。
四、小结
通过对c语言的课程设计,我了解并发现了很多调试程序的方法,而且懂得了如何处理错误的方法。对C语言的使用得到了进一步的提高。针对顺序结构程序,选择结构程序的设计和函数等知识得到了进一步的巩固,具体化就是加深了我对程序的深层理解,清楚程序中每一步的功能,在程序的运行中是十分重要的,一个好的结构在运行中能够充分的发挥程序的功能。结构设计的合理性决定了这个程序的价值。在今后的学习中我要注意这方面,使得我的编程能力能有进一步的提高。
经历了这次课程设计,不仅对我的学习提供了帮助,而且在意志力方面也得到了锻炼。没有足够的耐力和信心就很难坚持对课程设计每一步的顺利进行。
10
五、附录原程序
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
add();/*增加数据函数声明*/
del();/*删除数据函数声明*/
sort();/*查找数据函数声明*/
change();/*修改数据函数声明*/
average();/*计算及排序函数声明*/
struct dat
{ int year;
int month;
int date;};/*定义结构体*/
struct student
{char num[10];
char name[25];
char sex[1];
struct dat birthday;
int math;
int english;
int computer;
int physical;
}students[4];/*定义结构体*/
static int n=0;
int i=1;/*全局变量*/
menu()
{
int m;
printf("\t\t\t|__________________|\n"); printf("\t\t\t|1.add number |\n"); printf("\t\t\t|------------------|\n");
printf("\t\t\t|2.delect number |\n"); printf("\t\t\t|------------------|\n");
printf("\t\t\t|3.sort number |\n"); printf("\t\t\t|------------------|\n");
printf("\t\t\t|4.change number |\n"); printf("\t\t\t|------------------|\n");
printf("\t\t\t|5.average sum numb|\n"); printf("\t\t\t|------------------|\n");
printf("\t\t\t|6.out programe |\n");
printf("\t\t\t|__________________|\n");/*工作界面*/ 11
printf("please choose 1 or 2 or 3 or 4 or 5 or 6:\n");/*选 择功能*/
scanf("%d",&m);
if(m==1) add();
if(m==2) del();
if(m==3) sort();
if(m==4) change();
if(m==5) average();
if(m==6) return_confirm(); /*调用函数*/
}
page_title(char *menu_item)/*定义函数*/
{
clrscr();
printf(">>> 学 生 管 理 系 统 <<<\n\n- %s -\n\n",menu_item); }/*显示功能标题*/
return_confirm(void)/*定义函数*/
{
printf("\n按任意键返回??\n");
getch();/*键入任意键*/
}
add()/*定义函数*/
{
int n,m;/*定义局部变量*/
page_title("录入学生基本信息");/*调用函数*/
for(n=0;n<4;n++)
{
printf("学号:");
scanf("%s",students[n].num);
printf("\n姓名:");
scanf("%s",students[n].name);
printf("\n性别:");
scanf("%s",students[n].sex);
printf("\n年:");
scanf("%d",&students[n].birthday.year);
printf("\n月:");
scanf("%d",&students [n].birthday.month);
printf("\n日:");
scanf("%d",&students[n].birthday.date);
printf("\n数学:");
scanf("%d",&students[n].math);
printf("\n英语:");
scanf("%d",&students[n].english);
12
printf("\n计算机:");
scanf("%d",&students[n].computer);
printf("\n体育:");
scanf("%d",&students[n].physical);/*输入数据*/
}
for(n=0;n<4;n++)
{ printf("学号,姓名,性别,年,月,日,数学,英语,计算机,体育\n"); printf(" %s %s %s %d %d %d %d %d %d %d\n",students[n].num,students[n].name,students[n].sex,
students[n].birthday.year,students[n].birthday.month,students[n].birthday.date,
students[n].math,students[n].english,students[n].computer,students[n].physical); }
menu();
}
del()/*定义函数*/
{
int n,k,m;/*定义局部变量*/
scanf("%d\n",&n);
page_title("删除学生基本信息");
if((n=sort())!=-1)/*调用并调用*/
strcpy(students[n].num,"");/*清空*/
printf("\n!该学生已删除.\n");
k=n;
for(n=k;n<4;n++)
strcpy(students[n].num,students[n+1].num);
for(n=0;n<4;n++)
{ printf("学号,姓名,性别,年,月,日,数学,英语,计算机,体育\n"); printf("%s %s %s %d %d %d %d %d %d %d \n",students[n].num,students[n].name,students[n].sex,
students[n].birthday.year,students[n].birthday.month,students[n].birthday.date,students
[n].math,students[n].english,
students[n].computer,students[n].physical);
}
menu();
}
int sort()/*定义函数*/
{
int n;/*定义局部变量*/
char i[10];/*定义局部变量*/
13
page_title("查找学生基本信息");/*调用函数*/
printf("请输入学生学号:");
fflush(stdin);
gets(i);
for(n=0;n<32;n++)
{
if(strcmp(students[n].num,i)==0)
{
printf("学号:%s\n",students[n].num);
printf("姓名:%s\n",students[n].name);
printf("出生年月:%d%d%d\n",students[n].birthday.year,students[n].birthday.month,students[n].birthday.date);
printf("性别:%c\n",students[n].sex);
printf("数学,英语,计算机,体育:%d,%d,%d,%d\n",students[n].math,students[n].english,
students[n].computer,students[n].physical);
return n;
}
}
printf("\n输入错误或学号不存在.\n");
return -1;
menu();
}
int change()
{
int n;
int m;
page_title("修改学生基本信息");
printf("\n请输入要修改的学生号:");
scanf("%s",&n);
if((n=sort())!=-1)
{
printf("\n请重新输入新信息:");
printf("\n学号:");
scanf("%s",students[n].num);
printf("\n姓名:");
scanf("%s",students[n].name);
printf("\n性别:");
14
scanf("%s",students[n].sex);
printf("\n年:");
scanf("%d",&students[n].birthday.year);
printf("\n月:");
scanf("%d",&students [n].birthday.month);
printf("\n日:");
scanf("%d",&students[n].birthday.date);
printf("\n数学:");
scanf("%d",&students[n].math);
printf("\n英语:");
scanf("%d",&students[n].english);
printf("\n计算机:");
scanf("%d",&students[n].computer);
printf("\n体育:");
scanf("%d",&students[n].physical);/*输入数据*/
}
for(n=0;n<4;n++)
{ printf("学号,姓名,性别,年,月,日,数学,英语,计算机,体育\n"); printf(" %s %s %s %d %d %d %d %d %d %d\n",students
[n].num,students[n].name,students[n].sex,
students[n].birthday.year,students[n].birthday.month,students[n].birthday.date,
students[n].math,students[n].english,students[n].computer,students[n].physical); }
menu();
}
average()
{
int sum[10],averge[10],n,m,t,j;
char a[10],b[25];
page_title("求和及平均值");
for(n=0;n<4;n++)
{
sum[n]=students[n].math+students[n].english+students[n].computer+students[n].physical;
averge[n]=sum[n]/(n+1);
printf("\n总分,平均分:%d,%d",sum[n],averge[n]);
}
15
for(j=0;j<4;j++)
for(n=0;n<=j;n++)
if(sum[n]<sum[n+1])
{t=sum[n];sum[n]=sum[n+1];sum[n+1]=t;
strcpy(b,students[n].num);
strcpy(students[n].num,students[n+1].num);
strcpy(students[n+1].num,b);
};
for(n=0;n<4;n++)
{ printf("学号:%s\n",students[n].num);
printf("姓名:%s\n",students[n].name);
printf("出生年
月:%d%d%d\n",students[n].birthday.year,students[n].birthday.month,students
[n].birthday.date);
printf("性别:%c\n",students[n].sex);
printf("数学,英语,计算机,体
育:%d%d%d\n",students[n].math,students[n].english,students
[n].computer,students[n].physical);
}
menu();
}
void main()/*主函数*/
{ int m,x,h=123456;/*定义局部变量*/
printf("\n\t\t\t***************************************\n");
printf("\t\t\t* *\n");
printf("\t\t\t* welcome entry student squart systerm*\n");
printf("\t\t\t* *\n");
printf("\t\t\t***************************************\n");
printf("\t\t\tplease enter secret:\n");
scanf("%d",&x);/*输入密码*/
system("cls");/*清空*/
if(x!=h)/*判断密码是否正确*/
printf("secret error:\n");
else
{
menu();
}
}
16
? 17