资源描述
http://www.ut365。com/cyuyan/10。html
学生成绩管理系统(c语言)课程设计报告
学生成绩管理系统
要求是这样的
1、用c语言编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。
2、具体要求:
建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
程序运行时显示一个简单的菜单,例如:
(1):信息输入(INPUT)
(2):总分统计(COUNT)
(3):总分排序(SORT)
(4):查询(QUERY)
其中:
(1):对4个学生的信息进行输入;
(2):对每个学生的3门课程统计总分;
(3):对4个学生的总分按降序排序并显示出来;
(4):查询输入一个学号后,显示出该学生的有关信息;
。。。。。。。。。。.。
偶先写了个。.。
#i nclude〈iostream.h〉
#i nclude<stdlib。h>
struct student
{
int num;
char name[20];
int foxscore;
int cscore;
int englishscore;
struct student *next;
};
void menu()
{
cout〈<” welecome to my student grade management system"〈〈endl;
cout<<” please follow everyone step in the menu”〈〈endl;
cout〈<" 1。input information”〈〈endl;
cout〈<" 2.total scores”<<endl;
cout〈〈” 3.sort”<<endl;
cout〈〈” 4.query”〈〈endl;
cout〈〈" ***************************************************"〈〈endl;
}
struct student *creat(struct student *head) // 函数返回的是与节点相同类型的指针
{
struct student *p1,*p2;
p1=p2=(struct student*) malloc(sizeof(struct student)); // 申请新节点
cin〉〉p1—〉num>〉p1->name>〉p1-〉foxscore>>p1—>cscore〉〉p1->englishscore; // 输入节点的值
p1-〉 next = NULL; // 将新节点的指针置为空
while(p1-〉num〉0)
{
if (head==NULL) head=p1; //空表,接入表头
else p2—〉next=p1; // 非空表,接到表尾
p2 = p1;
p1=(struct student *)malloc(sizeof(struct student)); //申请下一个新节点
cin〉〉p1-〉num〉>p1-〉name〉>p1—〉foxscore〉〉p1->cscore〉〉p1-〉englishscore;
//输入节点的值
}
return head; //返回链表的头指针
}
void count(struct student *head)
{
struct student *temp;
temp=head; //取得链表的头指针
while(temp!==NULL)
{
int m;
m=temp—>foxscore+temp->cscore+temp->englishscore;
cout〈<m<<endl;//输出链表节点的值
temp=temp—>next; //跟踪链表增长
}
}
void sort(struct student *head)
{
struct student *tp;
tp=head;
int a[4];//定义总分数组
int i,j,k;
while(temp!==NULL)
{
a[i]=tp—〉foxscore+tp-〉cscore+tp-〉englishscore;
tp=tp->next;
i=i+1;
}
for(j=1;j<=3;j++)//冒泡法排序
for(k=1;k〈=4-j;k++)
if(a[k]<a[k+1])
{
int t=a[k];a[k]=a[k+1];a[k+1]=t;
}
for(i=1;i〈5;i++)
cout〈〈a[i]<〈endl;
}
void query(struct student *head)
{
struct student *temper;
temper=head;
int number;
cin〉〉number;
for(int i=1;i〈=4;i++)
{
if(number==temper-〉num)
{
cout<〈" name is:”〈〈temper—〉name<〈endl;
cout〈〈” fox score is:”〈〈temper->foxscore〈<endl;
cout〈<” c score is:”〈〈temper—>cscore〈〈endl;
cout〈〈" English score is:”〈<temper-〉englishscore<<endl;
cout<<” congratulation,syetem have found what you want to search”〈<endl;
}
temper=temper-〉next;
}
}
void main()
{
menu();
cout<<” firstly,please input information:"<〈endl;
struct student *head;
head=NULL; /* 建一个空表*/
head=creat(head); /* 创建单链表*/
cout〈〈” secondly,count the total score each student:”<<endl;
count(head);
cout〈〈” thirdly,sorting the total score:"〈〈endl;
sort(head);
cout〈〈” enter num that you can search each shtudent's information”〈〈endl;
query(head);
cout〈<" thanks you for use my student grade management system”<〈endl;
}
编译时候都没有错。.。。
debug输入时候出现了错误。。。。
调试运行后发现原来是while循环出了问题啊
修改后。。。..。。.。
#i nclude〈iostream。h>
#i nclude<stdlib。h>
struct student
{
int num;
char name[20];
int foxscore;
int cscore;
int englishscore;
struct student *next;
};
void menu()
{
cout〈〈" welecome to my student grade management system"〈〈endl;
cout〈〈” please follow everyone step in the menu”<〈endl;
cout<〈" 1。input information”<〈endl;
cout〈〈" 2。total scores”<<endl;
cout〈〈” 3。sort"〈〈endl;
cout〈〈” 4.query"〈〈endl;
cout〈<” ***************************************************"〈<endl;
}
struct student *creat(struct student *head) // 函数返回的是与节点相同类型的指针
{
struct student *p1,*p2;
p1=p2=(struct student*) malloc(sizeof(struct student)); // 申请新节点
cin〉>p1—〉num>〉p1—〉name>〉p1—〉foxscore〉〉p1-〉cscore〉〉p1—〉englishscore; // 输入节点的值
p1-> next = NULL; // 将新节点的指针置为空
for(int i=1;i<=4;i++)
{
if (head==NULL) head=p1; //空表,接入表头
else p2—>next=p1; // 非空表,接到表尾
p2 = p1;
p1=(struct student *)malloc(sizeof(struct student)); //申请下一个新节点
if(i〈=3)
{
cin〉〉p1-〉num>〉p1-〉name〉〉p1—〉foxscore〉>p1->cscore〉>p1—〉englishscore;
}
//输入节点的值
}
return head; //返回链表的头指针
}
void count(struct student *head)
{
struct student *temp;
temp=head; //取得链表的头指针
for(int i=1;i〈=4;i++)
{
int m;
m=temp—〉foxscore+temp->cscore+temp—〉englishscore;
cout〈<m〈〈endl;//输出链表节点的值
temp=temp—〉next; //跟踪链表增长
}
}
void sort(struct student *head)
{
struct student *tp;
tp=head;
int a[4];//定义总分数组
int i,j,k;
a[1]=tp—〉foxscore+tp—〉cscore+tp—〉englishscore;
tp=tp—〉next;
a[2]=tp-〉foxscore+tp—>cscore+tp-〉englishscore;
tp=tp—〉next;
a[3]=tp—>foxscore+tp-〉cscore+tp—〉englishscore;
tp=tp-〉next;
a[4]=tp-〉foxscore+tp—〉cscore+tp—>englishscore;
for(j=1;j〈=3;j++)//冒泡法排序
for(k=1;k〈=4—j;k++)
if(a[k]〈a[k+1])
{
int t=a[k];a[k]=a[k+1];a[k+1]=t;
}
for(i=1;i<5;i++)
cout<〈a[i]〈〈endl;
}
void query(struct student *head)
{
struct student *temper;
temper=head;
int number;
cin〉〉number;
for(int i=1;i〈=4;i++)
{
if(number==temper—〉num)
{
cout〈〈" name is:"<〈temper—〉name〈〈endl;
cout〈〈” fox score is:"<〈temper—〉foxscore<<endl;
cout<〈” c score is:”<<temper->cscore〈〈endl;
cout<〈" English score is:"〈〈temper—〉englishscore〈<endl;
cout〈〈” congratulation,syetem have found what you want to search”〈〈endl;
}
temper=temper-〉next;
}
}
void main()
{
menu();
cout〈<” firstly,please input information:”〈〈endl;
struct student *head;
head=NULL; /* 建一个空表*/
head=creat(head); /* 创建单链表*/
cout〈<" secondly,count the total score each student:”<<endl;
count(head);
cout<〈” thirdly,sorting the total score:”<〈endl;
sort(head);
cout〈〈" enter num that you can search each shtudent's information"〈<endl;
query(head);
cout〈〈” thanks you for use my student grade management system”<<endl;
}
C语言课程设计_贪吃蛇代码
#define N 200
#include 〈graphics。h>
#include <stdlib.h〉
#include 〈dos.h〉
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;/*得分*/
int gamespeed=50000;/*游戏速度自己调整*/
struct Food
{
int x;/*食物的横坐标*/
int y;/*食物的纵坐标*/
int yes;/*判断是否要出现食物的变量*/
}food;/*食物的结构体*/
struct Snake
{
int x[N];
int y[N];
int node;/*蛇的节数*/
int direction;/*蛇移动方向*/
int life;/* 蛇的生命,0活着,1死亡*/
}snake;
void Init(void);/*图形驱动*/
void Close(void);/*图形结束*/
void DrawK(void);/*开始画面*/
void GameOver(void);/*结束游戏*/
void GamePlay(void);/*玩游戏具体过程*/
void PrScore(void);/*输出成绩*/
/*主函数*/
void main(void)
{
Init();/*图形驱动*/
DrawK();/*开始画面*/
GamePlay();/*玩游戏具体过程*/
Close();/*图形结束*/
}
/*图形驱动*/
void Init(void)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,”c:\\tc");
cleardevice();
}
/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
void DrawK(void)
{
/*setbkcolor(LIGHTGREEN);*/
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/
for(i=50;i<=600;i+=10)/*画围墙*/
{
rectangle(i,40,i+10,49); /*上边*/
rectangle(i,451,i+10,460);/*下边*/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10); /*左边*/
rectangle(601,i,610,i+10);/*右边*/
}
}
/*玩游戏具体过程*/
void GamePlay(void)
{
randomize();/*随机数发生器*/
food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/
snake.life=0;/*活着*/
snake。direction=1;/*方向往右*/
snake。x[0]=100;snake。y[0]=100;/*蛇头*/
snake。x[1]=110;snake。y[1]=100;
snake。node=2;/*节数*/
PrScore();/*输出得分*/
while(1)/*可以重复玩游戏,压ESC键结束*/
{
while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/
{
if(food。yes==1)/*需要出现新食物*/
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food。x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
food。yes=0;/*画面上有食物了*/
}
if(food。yes==0)/*画面上有食物了就要显示*/
{
setcolor(GREEN);
rectangle(food.x,food。y,food。x+10,food。y—10);
}
for(i=snake。node-1;i〉0;i-—)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/
{
snake。x[i]=snake。x[i—1];
snake.y[i]=snake。y[i—1];
}
/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/
switch(snake。direction)
{
case 1:snake。x[0]+=10;break;
case 2: snake。x[0]-=10;break;
case 3: snake.y[0]—=10;break;
case 4: snake.y[0]+=10;break;
}
for(i=3;i<snake。node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/
{
if(snake.x[i]==snake。x[0]&&snake。y[i]==snake。y[0])
{
GameOver();/*显示失败*/
snake。life=1;
break;
}
}
if(snake。x[0]〈55||snake.x[0]〉595||snake。y[0]<55||
snake.y[0]〉455)/*蛇是否撞到墙壁*/
{
GameOver();/*本次游戏结束*/
snake.life=1; /*蛇死*/
}
if(snake。life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/
break;
if(snake。x[0]==food。x&&snake.y[0]==food.y)/*吃到食物以后*/
{
setcolor(0);/*把画面上的食物东西去掉*/
rectangle(food。x,food.y,food。x+10,food。y—10);
snake。x[snake。node]=—20;snake.y[snake.node]=—20;
/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/
snake.node++;/*蛇的身体长一节*/
food。yes=1;/*画面上需要出现新的食物*/
score+=10;
PrScore();/*输出新得分*/
}
setcolor(4);/*画出蛇*/
for(i=0;i<snake。node;i++)
rectangle(snake.x[i],snake。y[i],snake。x[i]+10,
snake。y[i]—10);
delay(gamespeed);
setcolor(0);/*用黑色去除蛇的的最后一节*/
rectangle(snake.x[snake。node—1],snake。y[snake。node—1],
snake.x[snake.node—1]+10,snake.y[snake。node—1]—10);
} /*endwhile(!kbhit)*/
if(snake。life==1)/*如果蛇死就跳出循环*/
break;
key=bioskey(0);/*接收按键*/
if(key==ESC)/*按ESC键退出*/
break;
else
if(key==UP&&snake.direction!=4)
/*判断是否往相反的方向移动*/
snake。direction=3;
else
if(key==RIGHT&&snake.direction!=2)
snake.direction=1;
else
if(key==LEFT&&snake.direction!=1)
snake。direction=2;
else
if(key==DOWN&&snake.direction!=3)
snake。direction=4;
}/*endwhile(1)*/
}
/*游戏结束*/
void GameOver(void)
{
cleardevice();
PrScore();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,”GAME OVER”);
getch();
}
/*输出成绩*/
void PrScore(void)
{
char str[10];
setfillstyle(SOLID_FILL,YELLOW);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,”score:%d",score);
outtextxy(55,20,str);
}
/*图形结束*/
void Close(void)
{
getch();
closegraph();
}
C语言课程设计_贪吃蛇代码,不错啊
c语言课程设计_计算器设计
#include 〈dos。h> /*DOS接口函数*/
#include <math.h〉 /*数学函数的定义*/
#include 〈conio。h> /*屏幕操作函数*/
#include <stdio.h〉 /*I/O函数*/
#include 〈stdlib。h〉 /*库函数*/
#include <stdarg.h〉 /*变量长度参数表*/
#include 〈graphics.h> /*图形函数*/
#include 〈string。h> /*字符串函数*/
#include 〈ctype。h〉 /*字符操作函数*/
#define UP 0x48 /*光标上移键*/
#define DOWN 0x50 /*光标下移键*/
#define LEFT 0x4b /*光标左移键*/
#define RIGHT 0x4d /*光标右移键*/
#define ENTER 0x0d /*回车键*/
void *rar; /*全局变量,保存光标图象*/
struct palettetype palette; /*使用调色板信息*/
int GraphDriver; /* 图形设备驱动*/
int GraphMode; /* 图形模式值*/
int ErrorCode; /* 错误代码*/
int MaxColors; /* 可用颜色的最大数值*/
int MaxX, MaxY; /* 屏幕的最大分辨率*/
double AspectRatio; /* 屏幕的像素比*/
void drawboder(void); /*画边框函数*/
void initialize(void); /*初始化函数*/
void computer(void); /*计算器计算函数*/
void changetextstyle(int font, int direction, int charsize); /*改变文本样式函数*/
void mwindow(char *header); /*窗口函数*/
int specialkey(void) ; /*获取特殊键函数*/
int arrow(); /*设置箭头光标函数*/
/*主函数*/
int main()
{
initialize();/* 设置系统进入图形模式 */
computer(); /*运行计算器 */
closegraph();/*系统关闭图形模式返回文本模式*/
return(0); /*结束程序*/
}
/* 设置系统进入图形模式 */
void initialize(void)
{
int xasp, yasp; /* 用于读x和y方向纵横比*/
GraphDriver = DETECT; /* 自动检测显示器*/
initgraph( &GraphDriver, &GraphMode, "” );
/*初始化图形系统*/
ErrorCode = graphresult(); /*读初始化结果*/
if( ErrorCode != grOk ) /*如果初始化时出现错误*/
{
printf("Graphics System Error: %s\n",
grapherrormsg( ErrorCode ) ); /*显示错误代码*/
exit( 1 ); /*退出*/
}
getpalette( &palette ); /* 读面板信息*/
MaxColors = getmaxcolor() + 1; /* 读取颜色的最大值*/
MaxX = getmaxx(); /* 读屏幕尺寸 */
MaxY = getmaxy(); /* 读屏幕尺寸 */
getaspectratio( &xasp, &yasp ); /* 拷贝纵横比到变量中*/
AspectRatio = (double)xasp/(double)yasp;/* 计算纵横比值*/
}
/*计算器函数*/
void computer(void)
{
struct viewporttype vp; /*定义视口类型变量*/
int color, height, width;
int x, y,x0,y0, i, j,v,m,n,act,flag=1;
float num1=0,num2=0,result; /*操作数和计算结果变量*/
char cnum[5],str2[20]={””},c,temp[20]={””};
char str1[]=”1230.456+-789*/Qc=^%";/* 定义字符串在按钮图形上显示的符号 */
mwindow( "Calculator” ); /* 显示主窗口 */
color = 7; /*设置灰颜色值*/
getviewsettings( &vp ); /* 读取当前窗口的大小*/
width=(vp.right+1)/10; /* 设置按钮宽度 */
height=(vp.bottom—10)/10 ; /*设置按钮高度 */
x = width /2; /*设置x的坐标值*/
y = height/2; /*设置y的坐标值*/
setfillstyle(SOLID_FILL, color+3);
bar( x+width*2, y, x+7*width, y+height );
/*画一个二维矩形条显示运算数和结果*/
setcolor( color+3 ); /*设置淡绿颜色边框线*/
rectangle( x+width*2, y, x+7*width, y+height );
/*画一个矩形边框线*/
setcolor(RED); /*设置颜色为红色*/
outtextxy(x+3*width,y+height/2,”0。”); /*输出字符串”0。"*/
x =2*width—width/2; /*设置x的坐标值*/
y =2*height+height/2; /*设置y的坐标值*/
for( j=0 ; j〈4 ; ++j ) /*画按钮*/
{
for( i=0 ; i〈5 ; ++i )
{
setfillstyle(SOLID_FILL, color);
setcolor(RED);
bar( x, y, x+width, y+height ); /*画一个矩形条*/
rectangle( x, y, x+width, y+height );
sprintf(str2,”%c”,str1[j*5+i]);
/*将字符保存到str2中*/
outtextxy( x+(width/2), y+height/2, str2);
x =x+width+ (width / 2) ; /*移动列坐标*/
}
y +=(height/2)*3; /* 移动行坐标*/
x =2*width—width/2; /*复位列坐标*/
}
x0=2*width;
y0=3*height;
x=x0;
y=y0;
gotoxy(x,y); /*移动光标到x,y位置*/
arrow(); /*显示光标*/
putimage(x,y,rar,XOR_PUT);
m=0;
n=0;
strcpy(str2,””); /*设置str2为空串*/
while((v=specialkey())!=45) /*当压下Alt+x键结束程序,否则执行下面的循环*/
{
while((v=specialkey())!=ENTER) /*当压下键不是回车时*/
{
putimage(x,y,rar,XOR_PUT); /*显示光标图象*/
if(v==RIGHT) /*右移箭头时新位置计算*/
if(x〉=x0+6*width)
/*如果右移,移到尾,则移动到最左边字符位置*/
{
x=x0;
m=0;
}
else
{
x=x+width+width/2;
m++;
} /*否则,右移到下一个字符位置*/
if(v==LEFT) /*左移箭头时新位置计算*/
if(x〈=x0)
{
x=x0+6*width;
m=4;
} /*如果移到头,再左移,则移动到最右边字符位置*/
else
{
x=x—width-width/2;
m——;
} /*否则,左移到前一个字符位置*/
if(v==UP) /*上移箭头时新位置计算*/
if(y〈=y0)
{
y=y0+4*height+height/2;
n=3;
} /*如果移到头,再上移,则移动到最下边字符位置*/
展开阅读全文