您的位置:

c语言600行小程序,c语言小程序200行

本文目录一览:

C++语言编写一个大概300~600行的程序解决一个实际问题。(必须使用类)

从今天凌晨3点多,一直写代码写到现在,除了吃饭没休息过。希望这个程序对你有所帮助。如果有任何疑惑的地方,可以继续提问、交流。附件里有源代码文件。

代码已经超过600行,这里只有部分代码,因为已经超过字数限制。其余代码可在源文件里查看。

#include iostream

#include conio.h

#include math.h

using namespace std;

#define Mc_MaxByte_MenuItem       61  //菜单项字符串长度最多61字节

#define Mc_MaxBufferSize          17  //缓存最大字节数。因为该程序只支持输入小于等于2字节的整型,而2字节整型的二进制位数有16位,所以需要17个字节保存二进制字符串,最后一个为结束符。

#define Mc_Back                  (-1) //返回上一级菜单

#define Mc_Exit                  (-2) //退出程序

#define Mc_Error                 (-3) //输入错误

#define Mc_Binary                 0   //二进制

#define Mc_Octonary               1   //八进制

#define Mc_Decimalism             2   //十进制

#define Mc_Hexadecimal            3   //十六进制

class Calculator //计算器类

{

 protected:

  char         chr1Buffer[Mc_MaxBufferSize]; //用于接收用户输入的数学算数运算式,如:“23+6*5-400/20=”

  bool         Chr1SameAsInt(char* chrPt,int number); //判断2个整数是否相等。前一个是用字符串表示的整数,后一个就是int型的整数。

  int          Chr1ToInt(const char* chrPt); //将用字符串表示的整数转换为int型整数

  int          Menu(char* chrPtMenuTitle,char chr2MenuItem[][Mc_MaxByte_MenuItem], int intItemCount,bool bCreateBackItem); //显示一个菜单。最后一个参数表示:是否创建“返回”选项

  void         ClearScreen();            //清屏

  void         ShowInf(const char* chrInf);    //显示一条信息

  void         NextLine(int count);      //换行

  int          NumberFormTransitionUI(char* title); //“整数的进制转换”功能界面

  void         InputToBuffer(const char* title);

  const char*  GetBuffer();

  void         (Calculator::*funPt)(const char* chrSource,char* chrResult); //函数指针

  int          NumberFormTransition(int source,int target); //进制转换函数。source源数据进制形式,target目标进制形式

  void         BinaryToOctonary(const char* chrPtBinary,char* chrPtOctonaryResult); //二进制转八进制。得出的结果将用字符串表示,且用chrPtOctonaryResult接收转换后的结果

  void         BinaryToDecimalism(const char* chrPtBinary,char* chrPtDecimalismResult); //二进制转十进制

  void         BinaryToHexadecimal(const char* chrPtBinary,char* chrPtHexadecimalResult); //二进制转十六进制

  void         OctonaryToDecimalism(const char* chrPtOctonary,char* chrPtDecimalismResult); //八进制转十进制

  void         OctonaryToBinary(const char* chrPtOctonary,char* chrPtBinaryResult); //八进制转二进制

  void         OctonaryToHexadecimal(const char* chrPtOctonary,char* chrPtHexadecimalResult); //八进制转十六进制

  void         DecimalismToBinary(const char* chrPtDecimalism,char* chrPtBinaryResult); //十进制转二进制

  void         DecimalismToOctonary(const char* chrPtDecimalism,char* chrPtOctonaryResult); //十进制转八进制

  void         DecimalismToHexadecimal(const char* chrPtDecimalism,char* chrPtHexadecimalResult); //十进制转十六进制

  void         HexadecimalToDecimalism(const char* chrPtHexadecimal,char* chrPtDecimalismResult); //十六进制转十进制

  void         HexadecimalToOctonary(const char* chrPtHexadecimal,char* chrPtOctonaryResult); //十六进制转八进制

  void         HexadecimalToBinary(const char* chrPtHexadecimal,char* chrPtBinaryResult); //十六进制转二进制

 public:

  int          UI();                   //计算器界面

};

int Calculator::UI()

{

  int code = !Mc_Exit, CodeTmp = 1;

  char chr2Menu[][Mc_MaxByte_MenuItem] = { "数的进制转换" };

  while (code != Mc_Exit)

  {

    code = Menu("计算器", chr2Menu, 1, false);

    switch (code)

    {

      case 1:

           ClearScreen();

           CodeTmp = NumberFormTransitionUI(chr2Menu[0]);

      break;

      case Mc_Error:

       ShowInf("\n   输入错误!请重新输入。 \n   按任意键继续...... ");

       getch();

       ClearScreen();

    }

    if (CodeTmp == Mc_Exit)

      code = Mc_Exit;

  }

  return code;

}

bool Calculator::Chr1SameAsInt(char* chrPt,int number)

{

  int len = strlen(chrPt) - 1;

  while(number  len = 0)

  {

    if (chrPt[len] - 48 != number % 10)

      break;

    len --, number /= 10;

  }

  if (len  0  !number)

    return true;

  return false;

}

int Calculator::Chr1ToInt(const char* chrPt)

{

  int len = strlen(chrPt), num = 0, i;

  for (i = 0; len  0; len --, i ++) //将用字符串表示的数字转换成int整数

    num += (chrPt[i] - 48) * (int)pow(10, len - 1);

  return num;

}

int Calculator::Menu(char* chrPtMenuTitle,char chr2MenuItem[][Mc_MaxByte_MenuItem],int intItemCount,bool bCreateBackItem)

{

  int index, choice = 0, len, i;

  cout"-------------- "chrPtMenuTitle" --------------"endlendl;

  for (index = 1; index = intItemCount; index ++)

    cout"  "index"."chr2MenuItem[index - 1]endl;

  if (bCreateBackItem)

    cout"  "index ++".""返回"endl;

  cout"  "index".""退出"endl;

  InputToBuffer("请输入相应选项的序号:");

  if (bCreateBackItem)

  {

    if (Chr1SameAsInt(chr1Buffer, index - 1))

      return Mc_Back;    //用户选择了返回选项

  }

  if (Chr1SameAsInt(chr1Buffer, index))

    return Mc_Exit;    //用户选择了退出选项

  len = strlen(chr1Buffer);

  for (i = 0; len  0; len --, i ++) //将用字符串表示的数字转换成int整数

    choice += (chr1Buffer[i] - 48) * (int)pow(10, len - 1);

  if (choice  1 || choice  index)

    return Mc_Error;

  return choice;

}

void Calculator::ClearScreen()

{

  system("cls");

}

void Calculator::ShowInf(const char* chrInf)

{

  coutchrInf;

}

void Calculator::NextLine(int count)

{

  while (count--  0)

  {

    cout'\n';

  }

}

void Calculator::InputToBuffer(const char* title)

{

  couttitle;

  cinchr1Buffer;

}

const char* Calculator::GetBuffer()

{

  return chr1Buffer;

}

void Calculator::BinaryToOctonary(const char* chrPtBinary,char* chrPtOctonaryResult)

{

  int index, x, numTmp = 0;

  bool  bBreak;

  const char* chrPt;

  char chr1Tmp[6]; //十进制65535等于八进制177777,这个最大值八进制数有6位数,所以至少需要6个字节。这个临时数组所保存的字符串不需要结束符。

  chrPt = chrPtBinary + strlen(chrPtBinary) - 1; //让chrPt指向最后一个字符

  index = 0, bBreak = false;

  while (bBreak == false)

  {

    for (x = 0, numTmp = 0; x  3; x ++, chrPt --)

    { // 01011011 --每3位二进制数对应一个八进制数。从最低位,右边开始:011=3,011=3,01=1。则该二进制数的八进制形式为133(最后结果需要反序)

      if (chrPt  chrPtBinary)

        numTmp += (*chrPt - 48) * (int)pow(2, x);

      else

      {

        numTmp += (*chrPt - 48) * (int)pow(2, x);

        bBreak = true;

        break;

      }

    }

    chr1Tmp[index ++] = numTmp + 48;

  }

  if (index  1)

  {

    for (-- index; index  0; index --)

      if (chr1Tmp[index] != '0')

        break;

  }

  else

  {

    chr1Tmp[0] = '0';

    index = 0;

  }

  for (; index = 0; chrPtOctonaryResult ++, index --)

    *chrPtOctonaryResult = chr1Tmp[index];

  *chrPtOctonaryResult = '\0'; //给返回参数加上结束符

}

void Calculator::DecimalismToBinary(const char* chrPtDecimalism,char* chrPtBinaryResult) //十进制转二进制

{

   int num = Chr1ToInt(chrPtDecimalism), index = 0;

   char chr1Tmp[16];

   while (num)

   {

     chr1Tmp[index ++] = num % 2 + 48;

     num /= 2;

   }

  if (!index)

  {

    chr1Tmp[0] = '0';

    index = 1;

  }

   for(-- index; index = 0; chrPtBinaryResult ++, index --)

     *chrPtBinaryResult = chr1Tmp[index];

   *chrPtBinaryResult = '\0';

}

void Calculator::DecimalismToHexadecimal(const char* chrPtDecimalism,char* chrPtHexadecimalResult) //十进制转十六进制

{

   int num = Chr1ToInt(chrPtDecimalism), index = 0, tmp;

   char chr1Tmp[16];

   while (num)

   {

     tmp = num % 16;

     num /= 16;

     switch (tmp)

     {

       case 10:

            chr1Tmp[index ++] = 'A';

       break;

       case 11:

            chr1Tmp[index ++] = 'B';

       break;

       case 12:

            chr1Tmp[index ++] = 'C';

       break;

       case 13:

            chr1Tmp[index ++] = 'D';

       break;

       case 14:

            chr1Tmp[index ++] = 'E';

       break;

       case 15:

            chr1Tmp[index ++] = 'F';

       break;

       default:

         chr1Tmp[index ++] = tmp + 48;

     }

   }

  if (!index)

  {

    chr1Tmp[0] = '0';

    index = 1;

  }

   for(-- index; index = 0; chrPtHexadecimalResult ++, index --)

     *chrPtHexadecimalResult = chr1Tmp[index];

   *chrPtHexadecimalResult = '\0';

}

void Calculator::HexadecimalToDecimalism(const char* chrPtHexadecimal,char* chrPtDecimalismResult) //十六进制转十进制

{

  int x, index, NumTmp = 0;

  const char* chrPt = chrPtHexadecimal + strlen(chrPtHexadecimal) - 1;

  char chr1Tmp[4];

  for ( x = 0; chrPt  chrPtHexadecimal; chrPt --)

  {

    switch (*chrPt)

    {

      case 'a':

      case 'A':

          NumTmp += 10 * (int)pow(16, x ++);

      break;

      case 'b':

      case 'B':

          NumTmp += 11 * (int)pow(16, x ++);

      break;

      case 'c':

      case 'C':

          NumTmp += 12 * (int)pow(16, x ++);

      break;

      case 'd':

      case 'D':

          NumTmp += 13 * (int)pow(16, x ++);

      break;

      case 'e':

      case 'E':

          NumTmp += 14 * (int)pow(16, x ++);

      break;

      case 'f':

      case 'F':

          NumTmp += 15 * (int)pow(16, x ++);

      break;

      default:

        NumTmp += (*chrPt - 48) * (int)pow(16, x ++);

    }

  }

  switch (*chrPt)

  {

    case 'a':

    case 'A':

        NumTmp += 10 * (int)pow(16, x);

    break;

    case 'b':

    case 'B':

        NumTmp += 11 * (int)pow(16, x);

    break;

    case 'c':

    case 'C':

        NumTmp += 12 * (int)pow(16, x);

    break;

    case 'd':

    case 'D':

        NumTmp += 13 * (int)pow(16, x);

    break;

    case 'e':

    case 'E':

        NumTmp += 14 * (int)pow(16, x);

    break;

    case 'f':

    case 'F':

        NumTmp += 15 * (int)pow(16, x);

    break;

    default:

      NumTmp += (*chrPt - 48) * (int)pow(16, x ++);

  }

  for (index = 0; NumTmp; index ++)

  {

    chr1Tmp[index] = NumTmp % 10 + 48;

    NumTmp /= 10;

  }

  if (!index)

  {

    chr1Tmp[0] = '0';

    index = 1;

  }

  for (-- index; index = 0; chrPtDecimalismResult ++, index --)

    *chrPtDecimalismResult = chr1Tmp[index];

  *chrPtDecimalismResult = '\0';

}

void Calculator::HexadecimalToOctonary(const char* chrPtHexadecimal,char* chrPtOctonaryResult) //十六进制转八进制

{

  char chr1Tmp[6];

  HexadecimalToDecimalism(chrPtHexadecimal, chr1Tmp);  //先将十六进制转化为十进制

  DecimalismToOctonary(chr1Tmp, chrPtOctonaryResult);  //再将十进制转化为八进制

}

void Calculator::HexadecimalToBinary(const char* chrPtHexadecimal,char* chrPtBinaryResult) //十六进制转二进制

{

  char chr1Tmp[6];

  HexadecimalToDecimalism(chrPtHexadecimal, chr1Tmp);  //先将十六进制转化为十进制

  DecimalismToBinary(chr1Tmp, chrPtBinaryResult);      //再将十进制转化为二进制

}

int main()

{

  Calculator cal;

  cal.UI();

  return 0;

}

求C语言600行的学生管理系统源程序

#include "stdio.h" /*I/O函数*/

#include "stdlib.h" /*其它说明*/

#include "string.h" /*字符串函数*/

#include "conio.h" /*屏幕操作函数*/

#include "mem.h" /*内存操作函数*/

#include "ctype.h" /*字符操作函数*/

#include "alloc.h" /*动态地址分配函数*/

#define N 3 /*定义常数*/

typedef struct z1 /*定义数据结构*/

{

char no[11];

char name[15];

int score[N];

float sum;

float average;

int order;

struct z1 *next;

}STUDENT;

/*以下是函数原型*/

STUDENT *init(); /*初始化函数*/

STUDENT *create(); /*创建链表*/

STUDENT *delete(STUDENT *h); /*删除记录*/

void print(STUDENT *h); /* 显示所有记录*/

void search(STUDENT *h); /*查找*/

void save(STUDENT *h); /*保存*/

STUDENT *load(); /*读入记录*/

void computer(STUDENT *h); /*计算总分和均分*/

STUDENT *insert(STUDENT *h); /*插入记录*/

void append(); /*追加记录*/

void copy(); /*复制文件*/

STUDENT *sort(STUDENT *h); /*排序*/

STUDENT *index(STUDENT *h); /*索引*/

void total(STUDENT *h); /*分类合计*/

int menu_select(); /*菜单函数*/

/******主函数开始*******/

main()

{

int i;

STUDENT *head; /*链表定义头指针*/

head=init(); /*初始化链表*/

clrscr(); /*清屏*/

for(;;) /*无限循环*/

{

switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/

{ /*值不同,执行的函数不同,break 不能省略*/

case 0:head=init();break; /*执行初始化*/

case 1:head=create();break; /*创建链表*/

case 2:head=delete(head);break; /*删除记录*/

case 3:print(head);break; /*显示全部记录*/

case 4:search(head);break; /*查找记录*/

case 5:save(head);break; /*保存文件*/

case 6:head=load(); break; /*读文件*/

case 7:computer(head);break; /*计算总分和均分*/

case 8:head=insert(head); break; /*插入记录*/

case 9:copy();break; /*复制文件*/

case 10:head=sort(head);break; /*排序*/

case 11:append();break; /*追加记录*/

case 12:head=index(head);break; /*索引*/

case 13:total(head);break; /*分类合计*/

case 14:exit(0); /*如菜单返回值为14程序结束*/

}

}

}

/*菜单函数,返回值为整数*/

menu_select()

{

char *menu[]={"***************MENU***************", /*定义菜单字符串数组*/

" 0. init list", /*初始化*/

" 1. Enter list", /*输入记录*/

" 2. Delete a record from list", /*从表中删除记录*/

" 3. print list ", /*显示单链表中所有记录*/

" 4. Search record on name", /*按照姓名查找记录*/

" 5. Save the file", /*将单链表中记录保存到文件中*/

" 6. Load the file", /*从文件中读入记录*/

" 7. compute the score", /*计算所有学生的总分和均分*/

" 8. insert record to list ", /*插入记录到表中*/

" 9. copy the file to new file", /*复制文件*/

" 10. sort to make new file", /*排序*/

" 11. append record to file", /*追加记录到文件中*/

" 12. index on nomber", /*索引*/

" 13. total on nomber", /*分类合计*/

" 14. Quit"}; /*退出*/

char s[3]; /*以字符形式保存选择号*/

int c,i; /*定义整形变量*/

gotoxy(1,25); /*移动光标*/

printf("press any key enter menu......\n"); /*压任一键进入主菜单*/

getch(); /*输入任一键*/

clrscr(); /*清屏幕*/

gotoxy(1,1); /*移动光标*/

textcolor(YELLOW); /*设置文本显示颜色为黄色*/

textbackground(BLUE); /*设置背景颜色为蓝色*/

gotoxy(10,2); /*移动光标*/

putch(0xc9); /*输出左上角边框┏*/

for(i=1;i44;i++)

putch(0xcd); /*输出上边框水平线*/

putch(0xbb); /*输出右上角边框 ┓*/

for(i=3;i20;i++)

{

gotoxy(10,i);putch(0xba); /*输出左垂直线*/

gotoxy(54,i);putch(0xba);

} /*输出右垂直线*/

gotoxy(10,20);putch(0xc8); /*输出左上角边框┗*/

for(i=1;i44;i++)

putch(0xcd); /*输出下边框水平线*/

putch(0xbc); /*输出右下角边框┛*/

window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/

clrscr(); /*清屏*/

for(i=0;i16;i++) /*输出主菜单数组*/

{

gotoxy(10,i+1);

cprintf("%s",menu[i]);

}

textbackground(BLACK); /*设置背景颜色为黑色*/

window(1,1,80,25); /*恢复原窗口大小*/

gotoxy(10,21); /*移动光标*/

do{

printf("\n Enter you choice(0~14):"); /*在菜单窗口外显示提示信息*/

scanf("%s",s); /*输入选择项*/

c=atoi(s); /*将输入的字符串转化为整形数*/

}while(c0||c14); /*选择项不在0~14之间重输*/

return c; /*返回选择项,主程序根据该数调用相应的函数*/

}

STUDENT *init()

{

return NULL;

}

/*创建链表*/

STUDENT *create()

{

int i; int s;

STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/

for(;;)

{

info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/

if(!info) /*如果指针info为空*/

{

printf("\nout of memory"); /*输出内存溢出*/

return NULL; /*返回空指针*/

}

inputs("enter no:",info-no,11); /*输入学号并校验*/

if(info-no[0]=='@') break; /*如果学号首字符为@则结束输入*/

inputs("enter name:",info-name,15); /*输入姓名,并进行校验*/

printf("please input %d score \n",N); /*提示开始输入成绩*/

s=0; /*计算每个学生的总分,初值为0*/

for(i=0;iN;i++) /*N门课程循环N次*/

{

do{

printf("score%d:",i+1); /*提示输入第几门课程*/

scanf("%d",info-score[i]); /*输入成绩*/

if(info-score[i]100||info-score[i]0) /*确保成绩在0~100之间*/

printf("bad data,repeat input\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; /*未排序前此值为0*/

info-next=h; /*将头结点做为新输入结点的后继结点*/

h=info; /*新输入结点为新的头结点*/

}

return(h); /*返回头指针*/

}

/*输入字符串,并进行长度验证*/

inputs(char *prompt, char *s, int count)

{

char p[255];

do{

printf(prompt); /*显示提示信息*/

scanf("%s",p); /*输入字符串*/

if(strlen(p)count)printf("\n too long! \n"); /*进行长度校验,超过count值重输入*/

}while(strlen(p)count);

strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/

}

/*输出链表中结点信息*/

void print(STUDENT *h)

{

int i=0; /* 统计记录条数*/

STUDENT *p; /*移动指针*/

clrscr(); /*清屏*/

p=h; /*初值为头指针*/

printf("\n\n\n****************************STUDENT********************************\n");

printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n");

printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n");

while(p!=NULL)

{

i++;

printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", i, p-no,p-name,p-score[0],p-score[1],

p-score[2],p-sum,p-average,p-order);

p=p-next;

}

printf("**********************************end*********************************\n");

}

/*删除记录*/

STUDENT *delete(STUDENT *h)

{

STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/

char s[11]; /*存放学号*/

clrscr(); /*清屏*/

printf("please deleted no\n"); /*显示提示信息*/

scanf("%s",s); /*输入要删除记录的学号*/

q=p=h; /*给q和p赋初值头指针*/

while(strcmp(p-no,s)p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/

{

q=p; /*将p指针值赋给q作为p的前驱指针*/

p=p-next; /*将p指针指向下一条记录*/

}

if(p==NULL) /*如果p为空,说明链表中没有该结点*/

printf("\nlist no %s student\n",s);

else /*p不为空,显示找到的记录信息*/

{

printf("*****************************have found***************************\n");

printf("|no | name | sc1| sc2| sc3| sum | ave |order|\n");

printf("|----------|---------------|----|----|----|--------|-------|-----|\n");

printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p-no,

p-name,p-score[0],p-score[1],p-score[2],p-sum,

p-average,p-order);

printf("********************************end*******************************\n");

getch(); /*压任一键后,开始删除*/

if(p==h) /*如果p==h,说明被删结点是头结点*/

h=p-next; /*修改头指针指向下一条记录*/

else

q-next=p-next; /*不是头指针,将p的后继结点作为q的后继结点*/

free(p); /*释放p所指结点空间*/

printf("\n have deleted No %s student\n",s);

printf("Don't forget save\n");/*提示删除后不要忘记保存文件*/

}

return(h); /*返回头指针*/

}

用c语言编写的一个小程序,200行以上,急!!!

C语言课程设计报告-------学生成绩简单管理程序一、系统菜单的主要功能(1)输入若干条记录(2)显示所有记录(3)按学号排序(4)插入一条记录(5)按姓名查找,删除一条记录(6)查找并显示一条记录(7)输出统计信息 (新增)(8)从正文中添加数据到结构体数组中(9)将所有数据写入文件中(0)退出程序二、题目分析该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。功能2是显示所有的记录,通过循环输出,格式也比较重要。功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。功能6的算法在5中就已经体现了,输入姓名,一一比较。功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。功能8和9是对文件的操作,提前准备好数据。三、程序正文部分#includestdio.h /*引用库函数*/#includestdlib.h#includectype.h#includestring.htypedef struct /*定义结构体数组*/{char num[10]; /*学号*/char name[20]; /*姓名*/int score; /*成绩*/}Student;Student stu[80]; /*结构体数组变量*/int menu_select() /*菜单函数*/{char c;do{system("cls"); /*运行前清屏*/printf("\t\t****Students' Grade Management System****\n"); /*菜单选择*/printf("\t\t | 1. Input Records |\n");printf("\t\t | 2. Display All Records |\n");printf("\t\t | 3. Sort |\n");printf("\t\t | 4. Insert a Record |\n");printf("\t\t | 5. Delete a Record |\n");printf("\t\t | 6. Query |\n");printf("\t\t | 7. Statistic |\n");printf("\t\t | 8. Add Records from a Text File|\n");printf("\t\t | 9. Write to a Text file |\n");printf("\t\t | 0. Quit |\n");printf("\t\t*****************************************\n");printf("\t\t\tGive your Choice(0-9):");c=getchar(); /*读入选择*/}while(c'0'||c'9');return(c-'0'); /*返回选择*/}int Input(Student stud[],int n) /*输入若干条记录*/{int i=0;char sign,x[10]; /*x[10]为清除多余的数据所用*/while(sign!='n'sign!='N') /*判断*/{ printf("\t\t\tstudent's num:"); /*交互输入*/scanf("\t\t\t%s",stud[n+i].num);printf("\t\t\tstudent's name:");scanf("\t\t\t%s",stud[n+i].name);printf("\t\t\tstudent's score:");scanf("\t\t\t%d",stud[n+i].score);gets(x); /*清除多余的输入*/printf("\t\t\tany more records?(Y/N)");scanf("\t\t\t%c",sign); /*输入判断*/i++;}return(n+i);}void Display(Student stud[],int n) /*显示所有记录*/{int i;printf("\t\t\t-----------------------------------\n"); /*格式头*/printf("\t\t\tnumber name score\n");printf("\t\t\t-----------------------------------\n");for(i=1;in+1;i++) /*循环输入*/{printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);if(i1i%10==0) /*每十个暂停*/{printf("\t\t\t-----------------------------------\n"); /*格式*/printf("\t\t\t");system("pause");printf("\t\t\t-----------------------------------\n");}}printf("\t\t\t");system("pause");}void Sort_by_num(Student stud[],int n) /*按学号排序*/{ int i,j,*p,*q,s;char t[10];for(i=0;in-1;i++) /*冒泡法排序*/for(j=0;jn-1-i;j++)if(strcmp(stud[j].num,stud[j+1].num)0){strcpy(t,stud[j+1].num);strcpy(stud[j+1].num,stud[j].num);strcpy(stud[j].num,t);strcpy(t,stud[j+1].name);strcpy(stud[j+1].name,stud[j].name);strcpy(stud[j].name,t);p=stud[j+1].score;q=stud[j].score;s=*p;*p=*q;*q=s;}}int Insert_a_record(Student stud[],int n) /*插入一条记录*/{char x[10]; /*清除多余输入所用*/printf("\t\t\tstudent's num:"); /*交互式输入*/scanf("\t\t\t%s",stud[n].num);printf("\t\t\tstudent's name:");scanf("\t\t\t%s",stud[n].name);printf("\t\t\tstudent's score:");scanf("\t\t\t%d",stud[n].score);gets(x);n++;Sort_by_num(stud,n); /*调用排序函数*/printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/return(n);}int Delete_a_record(Student stud[],int n) /*按姓名查找,删除一条记录*/{ char s[20];int i=0,j;printf("\t\t\ttell me his(her) name:"); /*交互式问寻*/scanf("%s",s);while(strcmp(stud[i].name,s)!=0in) i++; /*查找判断*/if(i==n){ printf("\t\t\tnot find!\n"); /*返回失败信息*/return(n);}for(j=i;jn-1;j++) /*删除操作*/{strcpy(stud[j].num,stud[j+1].num);strcpy(stud[j].name,stud[j+1].name);stud[j].score=stud[j+1].score;}printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/return(n-1);}void Query_a_record(Student stud[],int n) /*查找并显示一个记录*/{ char s[20];int i=0;printf("\t\t\tinput his(her) name:"); /*交互式输入*/scanf("\t\t\t%s",s);while(strcmp(stud[i].name,s)!=0in) i++; /*查找判断*/if(i==n){ printf("\t\t\tnot find!\n"); /*输入失败信息*/return;}printf("\t\t\this(her) number:%s\n",stud[i].num); /*输出该学生信息*/printf("\t\t\this(her) score:%d\n",stud[i].score);}void Statistic(Student stud[],int n) /*新增功能,输出统计信息*/{ int i,j=0,k=0,sum=0;float aver; /*成绩平均值*/for(i=0;in;i++) /*循环输入判断*/{sum+=stud[i].score;if(stud[j].scorestud[i].score) j=i;if(stud[k].scorestud[i].score) k=i;}aver=1.0*sum/n;printf("\t\t\tthere are %d records.\n",n); /*总共记录数*/printf("\t\t\tthe hignest score:\n"); /*最高分*/printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score);printf("\t\t\tthe lowest score:\n"); /*最低分*/printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score);printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/}int AddfromText(Student stud[],int n) /*从文件中读入数据*/{ int i=0,num;FILE *fp; /*定义文件指针*/char filename[20]; /*定义文件名*/printf("\t\t\tInput the filename:");scanf("\t\t\t%s",filename); /*输入文件名*/if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/{ printf("\t\t\tcann't open the file\n"); /*打开失败信息*/printf("\t\t\t");system("pause");return(n);}fscanf(fp,"%d",num); /*读入总记录量*/while(inum) /*循环读入数据*/{fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,stud[n+i].score);i++;}n+=num;fclose(fp); /*关闭文件*/printf("\t\t\tSuccessed!\n");printf("\t\t\t");system("pause");return(n);}void WritetoText(Student stud[],int n) /*将所有记录写入文件*/{int i=0;FILE *fp; /*定义文件指针*/char filename[20]; /*定义文件名*/printf("\t\t\tWrite Records to a Text File\n"); /*输入文件名*/printf("\t\t\tInput the filename:");scanf("\t\t\t%s",filename);if((fp=fopen(filename,"w"))==NULL) /*打开文件*/{printf("\t\t\tcann't open the file\n");system("pause");return;}fprintf(fp,"%d\n",n); /*循环写入数据*/while(in){fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);i++;}fclose(fp); /*关闭文件*/printf("Successed!\n"); /*返回成功信息*/}void main() /*主函数*/{int n=0;for(;;){switch(menu_select()) /*选择判断*/{case 1:printf("\t\t\tInput Records\n"); /*输入若干条记录*/n=Input(stu,n);break;case 2:printf("\t\t\tDisplay All Records\n"); /*显示所有记录*/Display(stu,n);break;case 3:printf("\t\t\tSort\n");Sort_by_num(stu,n); /*按学号排序*/printf("\t\t\tSort Suceessed!\n");printf("\t\t\t");system("pause");break;case 4:printf("\t\t\tInsert a Record\n");n=Insert_a_record(stu,n); /*插入一条记录*/printf("\t\t\t");system("pause");break;case 5:printf("\t\t\tDelete a Record\n");n=Delete_a_record(stu,n); /*按姓名查找,删除一条记录*/printf("\t\t\t");system("pause");break;case 6:printf("\t\t\tQuery\n");Query_a_record(stu,n); /*查找并显示一个记录*/printf("\t\t\t");system("pause");break;case 7:printf("\t\t\tStatistic\n");Statistic(stu,n); /*新增功能,输出统计信息*/printf("\t\t\t");system("pause");break;case 8:printf("\t\t\tAdd Records from a Text File\n");n=AddfromText(stu,n); /*新增功能,输出统计信息*/break;case 9:printf("\t\t\tWrite to a Text file\n");WritetoText(stu,n); /*循环写入数据*/printf("\t\t\t");system("pause");break;case 0:printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*结束程序*/printf("\t\t\t");system("pause");exit(0);}}}四、函数调用关系图注:“→”代表调用Input函数打印链表记录Display函数输入若干条记录menu_select()函数选择菜单Sort_by_num函数显示所有记录Delete_a_record函数按姓名查找,删除一条记录Query_a_record查找并显示一条记录Statistic函数输出统计信息 (新增)AddfromText函数从正文中添加数据到结构体数组中Main函数Insert_a_record插入一条记录WritetoText函数 将所有数据写入文件中退出程序Reverse(head)函数按学号排序五、设计测试流程1、进入界面2、输入选项1,回车;按提示输入数据:3、回到主菜单;输入选项7,回车;输入文件名:data.txt,回车;出现成功提示,则读入文件操作成功。4、回到主菜单,输入2,回车每10个暂停显示数据5、回到主菜单,输入3,回车出现排序成功信息。6、回到主菜单,输入4,回车按提示插入一组数据7、回到主菜单,输入5,回车按提示输入姓名,删除数据出现删除成功的信息8、回到主菜单,输入6,回车输入姓名进行查询9、回到主菜单,输入7,回车出现统计信息10、回到主菜单,输入9,回车输入result.txt,回车出现成功写入文件的信息11、回到主菜单,输入0,回车退出系统

找人帮我编一个600行的代码

给你一个,不过比你要求的少个一两百行把

也很简单的,你也有这能力完成这样的程序

老师会相信你的,下面是程序代码:

#include stdio.h

#include string.h

#define STU_NUM 3//学生数

#define SCORE_NUM 5//每个学生的科目数

typedef struct /*定义结构体数组*/

{

char num[20]; /*学号*/

int age; /*年龄*/

char name[20]; /*姓名*/

char sex[5]; /*性别*/

float score[SCORE_NUM]; /*成绩*/

float total;//总分

float average;//平均分

} Student;

Student stu[STU_NUM];

//输入学生信息

void input()

{

int i,j;

printf("请输入%d个学生的信息:\n",STU_NUM);

for(i=0;iSTU_NUM;i++)

{

printf("学号:");

scanf("%s",stu[i].num);

printf("姓名:");

scanf("%s",stu[i].name);

printf("年龄:");

scanf("%d",stu[i].age);

printf("性别:",stu[i].sex);

scanf("%s",stu[i].sex);

for(j=0;jSCORE_NUM;j++)

{

printf("科目%d的成绩:",j+1);

scanf("%f",stu[i].score[j]);

}

}

}

//输出学生信息

void output(int i)

{

int j;

printf("学生的信息如下:\n");

printf("学号:%s",stu[i].num);

printf("姓名:%s",stu[i].name);

printf("年龄:%d",stu[i].age);

printf("性别:%s\n",stu[i].sex);

for(j=0;jSCORE_NUM;j++)

{

printf("科目%d:%f\n",j+1,stu[i].score[j]);

}

printf("总分:%f\n",stu[i].total);

printf("平均分:%f\n",stu[i].average);

}

//计算总分和平均分

void process()

{

int i,j;

for(i=0;iSTU_NUM;i++)

{

stu[i].total=0;

for(j=0;jSCORE_NUM;j++)

{

stu[i].total+=stu[i].score[j];

}

stu[i].average=stu[i].total/SCORE_NUM;

}

}

//排序并输出

void sort()

{

Student tStu;

int i,j;

for(i=0;iSTU_NUM;i++)

{

for(j=STU_NUM-1;ji;j--)

{

if(stu[j].totalstu[j-1].total)

{

tStu=stu[j];

stu[j]=stu[i];

stu[i]=tStu;

}

}

}

for(i=0;iSTU_NUM;i++)

{

output(i);

}

}

//根据学号查找

void find(char *no)

{

int i;

for(i=0;iSTU_NUM;i++)

{

if(strcmp(stu[i].num,no)==0)

{

output(i);

return;

}

}

printf("没有找到!\n");

}

void main()

{

input();

process();

sort();

find("1");

}

程序2:

/**********************

作者:***

日期:2007年7月9日

描述:学员成绩管理。

**********************/

#include stdio.h

#define N 50

int NUM;

int x; //全局变量

struct student //定义并声明结构变量

{

int number;

char name[20];

float score[3];

float ave;

}stu[N];

void suan(int );

void insert(int ); //录入学员信息

void display(struct student *p,int ); //显示信息

void paixu(struct student stu[],int ); //冒泡排序

void add(int ); //增加学员信息

void del(struct student *p,int ); //删除学员信息

void tui(int ); //退出系统

void main()

{

int i=0;

printf("\n\n=======================欢迎进行学员成绩管理系统=======================\n\n\n");

suan(x);

//增加

//调用函数

}

void suan(int i)

{

char x;

printf(" \n\n 1、输入学员信息 2、增加学员信息 3、删除学员信息 4、退出\n");

printf("\n请输入选项:");

scanf("%d",x);

switch (x)

{

case 1:

{

insert(i); //调用函数

break;

}

case 2:

{

add(NUM);

break;

}

case 3:

{

del(stu,NUM);

paixu(stu,NUM);

break;

}

case 4:

{

tui(NUM);

break;

}

default:

printf("\n输入有误\n\n");

}

}

void insert(int i)

{

int j;

float sum;

char ch;

do

{

sum=0;

printf("\n请输入学员信息:\n");

printf("\n学号:");

scanf("%d",stu[i].number);

printf("\n姓名:");

scanf("%s",stu[i].name);

printf("\n三门成绩:\n");

for (j=0;j3;j++)

{

printf("\n成绩%d:",j+1);

scanf("%f",stu[i].score[j]);

sum+=stu[i].score[j];

}

stu[i].ave=sum/3;

i++;

printf("\n是否继续输入学员信息?(y/n)");

fflush(stdin);

ch=getchar();

}while(ch=='y' || ch=='Y');

printf("\n排序前学员信息:\n");

display(stu,i);

printf("\n排序后的学员信息如下:\n");

paixu(stu,i);

NUM=i;

suan(x);

}

void display(struct student *p,int n)

{

int i;

printf("\n学号\t姓名\t成绩:\n");

for (i=0;in;i++,p++)

{

printf("%d\t%s\t%lf\n",p-number,p-name,p-ave);

}

}

void paixu(struct student stu[],int n)

{

float temp;

int i,j;

for (i=0;in;i++)

{

for (j=0;jn-i-1;j++)

{

if (stu[j].avestu[j+1].ave)

{

temp=stu[j+1].ave;

stu[j+1].ave=stu[j].ave;

stu[j].ave=temp;

}

}

}

display(stu,n);

}

void add(int i)

{

char ch;

printf("\n是否需要插入新学员信息?(y/n)");

fflush(stdin);

ch=getchar();

if (ch=='y' || ch=='Y')

{

insert(i);

}

suan(x);

}

void del(struct student stu[],int n)

{

int num,i=0,j=0;

char ch;

printf("\n是否需要删除学员信息?(y/n)");

fflush(stdin);

ch=getchar();

while (ch=='y' ||ch=='Y')

{

printf("\n请输入删除学员的学号:");

scanf("%d",num);

for (i=0;in;i++)

{

if (num==stu[i].number)

break;

}

if (in)

{

for (j=i;jn;j++)

{

stu[j]=stu[j+1];

}

n--;

printf("\n删除后的学员信息如下:\n");

display(stu,n);

}

else

printf("\n对不起,没有这个学号!\n");

if (n==0)

break;

printf("\n是否要继续删除学员信息?(y/n)");

fflush(stdin);

ch=getchar();

}

suan(x);

}

void tui(int i)

{

char ch;

printf("\n退出?(y/n):");

fflush(stdin);

ch=getchar();

if (ch=='y' || ch=='Y')

{

printf("\n");

}

else

{

suan(x);

}

}

求一个用C语言编写的小游戏代码

#include graphics.h

#include conio.h

#include time.h

/////////////////////////////////////////////

// 定义常量、枚举量、结构体、全局变量

/////////////////////////////////////////////

#define WIDTH 10 // 游戏区宽度

#define HEIGHT 22 // 游戏区高度

#define SIZE 20 // 每个游戏区单位的实际像素

// 定义操作类型

enum CMD

{

CMD_ROTATE, // 方块旋转

CMD_LEFT, CMD_RIGHT, CMD_DOWN, // 方块左、右、下移动

CMD_SINK, // 方块沉底

CMD_QUIT // 退出游戏

};

// 定义绘制方块的方法

enum DRAW

{

SHOW, // 显示方块

HIDE, // 隐藏方块

FIX // 固定方块

};

// 定义七种俄罗斯方块

struct BLOCK

{

WORD dir[4]; // 方块的四个旋转状态

COLORREF color; // 方块的颜色

} g_Blocks[7] = { {0x0F00, 0x4444, 0x0F00, 0x4444, RED}, // I

{0x0660, 0x0660, 0x0660, 0x0660, BLUE}, // 口

{0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA}, // L

{0x2260, 0x0E20, 0x0644, 0x0470, YELLOW}, // 反L

{0x0C60, 0x2640, 0x0C60, 0x2640, CYAN}, // Z

{0x0360, 0x4620, 0x0360, 0x4620, GREEN}, // 反Z

{0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN}}; // T

// 定义当前方块、下一个方块的信息

struct BLOCKINFO

{

byte id; // 方块 ID

char x, y; // 方块在游戏区中的坐标

byte dir:2; // 方向

} g_CurBlock, g_NextBlock;

// 定义游戏区

BYTE g_World[WIDTH][HEIGHT] = {0};

/////////////////////////////////////////////

// 函数声明

/////////////////////////////////////////////

void Init(); // 初始化游戏

void Quit(); // 退出游戏

void NewGame(); // 开始新游戏

void GameOver(); // 结束游戏

CMD GetCmd(); // 获取控制命令

void DispatchCmd(CMD _cmd); // 分发控制命令

void NewBlock(); // 生成新的方块

bool CheckBlock(BLOCKINFO _block); // 检测指定方块是否可以放下

void DrawBlock(BLOCKINFO _block, DRAW _draw = SHOW); // 画方块

void OnRotate(); // 旋转方块

void OnLeft(); // 左移方块

void OnRight(); // 右移方块

void OnDown(); // 下移方块

void OnSink(); // 沉底方块

/////////////////////////////////////////////

// 函数定义

/////////////////////////////////////////////

// 主函数

void main()

{

Init();

CMD c;

while(true)

{

c = GetCmd();

DispatchCmd(c);

// 按退出时,显示对话框咨询用户是否退出

if (c == CMD_QUIT)

{

HWND wnd = GetHWnd();

if (MessageBox(wnd, _T("您要退出游戏吗?"), _T("提醒"), MB_OKCANCEL | MB_ICONQUESTION) == IDOK)

Quit();

}

}

}

// 初始化游戏

void Init()

{

initgraph(640, 480);

srand((unsigned)time(NULL));

// 显示操作说明

setfont(14, 0, _T("宋体"));

outtextxy(20, 330, _T("操作说明"));

outtextxy(20, 350, _T("上:旋转"));

outtextxy(20, 370, _T("左:左移"));

outtextxy(20, 390, _T("右:右移"));

outtextxy(20, 410, _T("下:下移"));

outtextxy(20, 430, _T("空格:沉底"));

outtextxy(20, 450, _T("ESC:退出"));

// 设置坐标原点

setorigin(220, 20);

// 绘制游戏区边界

rectangle(-1, -1, WIDTH * SIZE, HEIGHT * SIZE);

rectangle((WIDTH + 1) * SIZE - 1, -1, (WIDTH + 5) * SIZE, 4 * SIZE);

// 开始新游戏

NewGame();

}

// 退出游戏

void Quit()

{

closegraph();

exit(0);

}

// 开始新游戏

void NewGame()

{

// 清空游戏区

setfillstyle(BLACK);

bar(0, 0, WIDTH * SIZE - 1, HEIGHT * SIZE - 1);

ZeroMemory(g_World, WIDTH * HEIGHT);

// 生成下一个方块

g_NextBlock.id = rand() % 7;

g_NextBlock.dir = rand() % 4;

g_NextBlock.x = WIDTH + 1;

g_NextBlock.y = HEIGHT - 1;

// 获取新方块

NewBlock();

}

// 结束游戏

void GameOver()

{

HWND wnd = GetHWnd();

if (MessageBox(wnd, _T("游戏结束。\n您想重新来一局吗?"), _T("游戏结束"), MB_YESNO | MB_ICONQUESTION) == IDYES)

NewGame();

else

Quit();

}

// 获取控制命令

DWORD m_oldtime;

CMD GetCmd()

{

// 获取控制值

while(true)

{

// 如果超时,自动下落一格

DWORD newtime = GetTickCount();

if (newtime - m_oldtime = 500)

{

m_oldtime = newtime;

return CMD_DOWN;

}

// 如果有按键,返回按键对应的功能

if (kbhit())

{

switch(getch())

{

case 'w':

case 'W': return CMD_ROTATE;

case 'a':

case 'A': return CMD_LEFT;

case 'd':

case 'D': return CMD_RIGHT;

case 's':

case 'S': return CMD_DOWN;

case 27: return CMD_QUIT;

case ' ': return CMD_SINK;

case 0:

case 0xE0:

switch(getch())

{

case 72: return CMD_ROTATE;

case 75: return CMD_LEFT;

case 77: return CMD_RIGHT;

case 80: return CMD_DOWN;

}

}

}

// 延时 (降低 CPU 占用率)

Sleep(20);

}

}

// 分发控制命令

void DispatchCmd(CMD _cmd)

{

switch(_cmd)

{

case CMD_ROTATE: OnRotate(); break;

case CMD_LEFT: OnLeft(); break;

case CMD_RIGHT: OnRight(); break;

case CMD_DOWN: OnDown(); break;

case CMD_SINK: OnSink(); break;

case CMD_QUIT: break;

}

}

// 生成新的方块

void NewBlock()

{

g_CurBlock.id = g_NextBlock.id, g_NextBlock.id = rand() % 7;

g_CurBlock.dir = g_NextBlock.dir, g_NextBlock.dir = rand() % 4;

g_CurBlock.x = (WIDTH - 4) / 2;

g_CurBlock.y = HEIGHT + 2;

// 下移新方块直到有局部显示

WORD c = g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];

while((c 0xF) == 0)

{

g_CurBlock.y--;

c = 4;

}

// 绘制新方块

DrawBlock(g_CurBlock);

// 绘制下一个方块

setfillstyle(BLACK);

bar((WIDTH + 1) * SIZE, 0, (WIDTH + 5) * SIZE - 1, 4 * SIZE - 1);

DrawBlock(g_NextBlock);

// 设置计时器,用于判断自动下落

m_oldtime = GetTickCount();

}

// 画方块

void DrawBlock(BLOCKINFO _block, DRAW _draw)

{

WORD b = g_Blocks[_block.id].dir[_block.dir];

int x, y;

int color = BLACK;

switch(_draw)

{

case SHOW: color = g_Blocks[_block.id].color; break;

case HIDE: color = BLACK; break;

case FIX: color = g_Blocks[_block.id].color / 3; break;

}

setfillstyle(color);

for(int i=0; i16; i++)

{

if (b 0x8000)

{

x = _block.x + i % 4;

y = _block.y - i / 4;

if (y HEIGHT)

{

if (_draw != HIDE)

bar3d(x * SIZE + 2, (HEIGHT - y - 1) * SIZE + 2, (x + 1) * SIZE - 4, (HEIGHT - y) * SIZE - 4, 3, true);

else

bar(x * SIZE, (HEIGHT - y - 1) * SIZE, (x + 1) * SIZE - 1, (HEIGHT - y) * SIZE - 1);

}

}

b = 1;

}

}

// 检测指定方块是否可以放下

bool CheckBlock(BLOCKINFO _block)

{

WORD b = g_Blocks[_block.id].dir[_block.dir];

int x, y;

for(int i=0; i16; i++)

{

if (b 0x8000)

{

x = _block.x + i % 4;

y = _block.y - i / 4;

if ((x 0) || (x = WIDTH) || (y 0))

return false;

if ((y HEIGHT) (g_World[x][y]))

return false;

}

b = 1;

}

return true;

}

// 旋转方块

void OnRotate()

{

// 获取可以旋转的 x 偏移量

int dx;

BLOCKINFO tmp = g_CurBlock;

tmp.dir++; if (CheckBlock(tmp)) { dx = 0; goto rotate; }

tmp.x = g_CurBlock.x - 1; if (CheckBlock(tmp)) { dx = -1; goto rotate; }

tmp.x = g_CurBlock.x + 1; if (CheckBlock(tmp)) { dx = 1; goto rotate; }

tmp.x = g_CurBlock.x - 2; if (CheckBlock(tmp)) { dx = -2; goto rotate; }

tmp.x = g_CurBlock.x + 2; if (CheckBlock(tmp)) { dx = 2; goto rotate; }

return;

rotate:

// 旋转

DrawBlock(g_CurBlock, HIDE);

g_CurBlock.dir++;

g_CurBlock.x += dx;

DrawBlock(g_CurBlock);

}

// 左移方块

void OnLeft()

{

BLOCKINFO tmp = g_CurBlock;

tmp.x--;

if (CheckBlock(tmp))

{

DrawBlock(g_CurBlock, HIDE);

g_CurBlock.x--;

DrawBlock(g_CurBlock);

}

}

// 右移方块

void OnRight()

{

BLOCKINFO tmp = g_CurBlock;

tmp.x++;

if (CheckBlock(tmp))

{

DrawBlock(g_CurBlock, HIDE);

g_CurBlock.x++;

DrawBlock(g_CurBlock);

}

}

// 下移方块

void OnDown()

{

BLOCKINFO tmp = g_CurBlock;

tmp.y--;

if (CheckBlock(tmp))

{

DrawBlock(g_CurBlock, HIDE);

g_CurBlock.y--;

DrawBlock(g_CurBlock);

}

else

OnSink(); // 不可下移时,执行“沉底方块”操作

}

// 沉底方块

void OnSink()

{

int i, x, y;

// 连续下移方块

DrawBlock(g_CurBlock, HIDE);

BLOCKINFO tmp = g_CurBlock;

tmp.y--;

while (CheckBlock(tmp))

{

g_CurBlock.y--;

tmp.y--;

}

DrawBlock(g_CurBlock, FIX);

// 固定方块在游戏区

WORD b = g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];

for(i = 0; i 16; i++)

{

if (b 0x8000)

{

if (g_CurBlock.y - i / 4 = HEIGHT)

{ // 如果方块的固定位置超出高度,结束游戏

GameOver();

return;

}

else

g_World[g_CurBlock.x + i % 4][g_CurBlock.y - i / 4] = 1;

}

b = 1;

}

// 检查是否需要消掉行,并标记

int row[4] = {0};

bool bRow = false;

for(y = g_CurBlock.y; y = max(g_CurBlock.y - 3, 0); y--)

{

i = 0;

for(x = 0; x WIDTH; x++)

if (g_World[x][y] == 1)

i++;

if (i == WIDTH)

{

bRow = true;

row[g_CurBlock.y - y] = 1;

setfillstyle(WHITE, DIAGCROSS2_FILL);

bar(0, (HEIGHT - y - 1) * SIZE + SIZE / 2 - 2, WIDTH * SIZE - 1, (HEIGHT - y - 1) * SIZE + SIZE / 2 + 2);

}

}

if (bRow)

{

// 延时 200 毫秒

Sleep(200);

// 擦掉刚才标记的行

IMAGE img;

for(i = 0; i 4; i++)

{

if (row[i])

{

for(y = g_CurBlock.y - i + 1; y HEIGHT; y++)

for(x = 0; x WIDTH; x++)

{

g_World[x][y - 1] = g_World[x][y];

g_World[x][y] = 0;

}

getimage(img, 0, 0, WIDTH * SIZE, (HEIGHT - (g_CurBlock.y - i + 1)) * SIZE);

putimage(0, SIZE, img);

}

}

}

// 产生新方块

NewBlock();

}

求一个c语言制作的小游戏或者小软件,行数不小于600,挺急的

贪吃蛇代码

#include stdio.h

#include graphics.h

#include stdlib.h

#include dos.h /*引用的库函数*/

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b/*宏定义键名*/

#define N 200

int i,key;

int level;/*游戏等级*/

int score=0;/*得分*/

int gamespeed;/*游戏速度*/

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 Choicelevle(void);/*选择游戏等级*/

void Init(void);/*图形驱动*/

void Close(void);/*图形结束*/

void DRAW(void);/*游戏区域*/

void GameOver(void);/*结束游戏*/

void GamePlay(void);/*玩游戏具体过程*/

void PrScore(void);/*输出成绩*/

/*主函数*/

void main(void)

{

Init();/*图形驱动*/

Choicelevle();/*选择游戏等级*/

DRAW();/*游戏区域*/

GamePlay();/*玩游戏具体过程*/

Close();/*图形结束*/

}

/*图形驱动*/

void Init(void)

{

int gd=DETECT,gm;

initgraph(gd,gm,"\\turboc2"); /*初始化图形系统*/

cleardevice(); /*清除图形界面*/

}

/*选择游戏等级*/

void Choicelevle(void)

{char name[20];

setcolor(YELLOW);

settextstyle(0,0,6);

outtextxy(150,150,"Snake");

setcolor(GREEN);

settextstyle(0,0,1);

outtextxy(200,250,"please put in your English name:");

outtextxy(200,270,"Choice levle from 1-9.");

outtextxy(300,320,"name:yangzilong");/*制作人姓名*/

outtextxy(300,350,"number:0902060226");/*制作人学号*/

outtextxy(300,380,"class:computer science 0602");/*制作人班级*/

getch();

printf("please putin your name:");

gets(name);

printf("please choice levle:");

scanf("%d",level);

gamespeed=100000-400*level-300*level*level;

if(level9||level1)

{cleardevice(); /*清除图形界面*/

setcolor(YELLOW); /*设置字体颜色*/

settextstyle(0,0,2); /*设置字体类型*/

outtextxy(150,200,"level input error"); /*显示文本*/

getch();

level=1;

}

}

void DRAW(void)

{cleardevice(); /*清屏*/

setcolor(2);

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/

rectangle(45,45,465,325);

}

/*玩游戏具体过程*/

void GamePlay(void)

{setcolor(5);

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/

randomize();/*随机数发生器*/

food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/

snake.life=0;/*活着*/

snake.direction=1;/*方向往右*/

snake.x[0]=320;snake.y[0]=240;/*蛇头*/

snake.x[1]=330;snake.y[1]=240; /*蛇的第二节位置*/

snake.node=3;/*节数*/

PrScore();/*输出得分*/

while(1)/*可以重复玩游戏,压ESC键结束*/

{

while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/

{

if(food.yes==1)/*需要出现新食物*/

{

food.x=rand()%360+70;

food.y=rand()%250+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;i0;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;isnake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/

{

if(snake.x[i]==snake.x[0]snake.y[i]==snake.y[0])

{

GameOver();/*显示失败*/

snake.life=1; /*蛇死*/

break;

}

}

/*如果蛇头碰到墙壁,蛇头从对面墙出来*/

if(snake.x[0]50)

{snake.x[0]=450;/*如果蛇头越过左边界,则从右边界进入*/

snake.y[0]=snake.y[0];/*纵坐标不变*/

for(i=snake.node-1;i0;i--)

{snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/

}

{

setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

}

else

if(snake.x[0]450)

{snake.x[0]=50;/*如果蛇头越过右边界,则蛇头从左边界进入*/

snake.y[0]=snake.y[0];/*纵坐标不变*/

for(i=snake.node-1;i0;i--)

{snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/

}

{

setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

}

else

if(snake.y[0]60)

{snake.y[0]=320;/*如果蛇头越过上边界,则从下边界进入*/

snake.x[0]=snake.x[0];/*横坐标不变*/

for(i=snake.node-1;i0;i--)

{snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/

}

{

setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

}

else

if(snake.y[0]320)

{snake.y[0]=60;/*如果蛇头越过下边界,则从上边界进入*/

snake.x[0]=snake.x[0];/*横坐标不变*/

for(i=snake.node-1;i0;i--)

{snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/

}

{

setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

}

if(snake.life==1)/*如果蛇死就跳出内循环,重新开始*/

break;

if(snake.x[0]==food.xsnake.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; /*每吃掉一食物,得分累加10分*/

if(score%100==0)

{level++;gamespeed=100000-400*level-300*level*level;/*每吃掉10食物提升一级,速度加快*/

PrScore();/*输出新得分*/

setcolor(YELLOW); /*设置字体颜色*/

settextstyle(0,0,4); /*设置字体类型*/

outtextxy(150,200,"LEVEL UP"); /*显示文本*/

if(level==10)

{level=1,gamespeed=100000-400*level-300*level*level;}

delay(6000000);

delay(6000000);

delay(6000000);

delay(6000000);

delay(6000000);

delay(6000000);

delay(6000000);

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

PrScore();/*输出新得分*/

}

setcolor(4);/*画出蛇*/

for(i=0;isnake.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==UPsnake.direction!=4)

/*判断是否往相反的方向移动*/

snake.direction=3;

else

if(key==RIGHTsnake.direction!=2)

snake.direction=1;

else

if(key==LEFTsnake.direction!=1)

snake.direction=2;

else

if(key==DOWNsnake.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 str1[20];/*设置字符型数组*/

setfillstyle(SOLID_FILL,0);

bar(50,15,390,35); /*填充矩形框*/

setcolor(6); /*设置文本颜色*/

settextstyle(0,0,2); /*设置数组显示位置*/

sprintf(str1,"score %d level %d",score,level);/*显示数组内容*/

outtextxy(55,20,str1);

setcolor(YELLOW); /*设置字体颜色*/

settextstyle(0,0,2); /*设置字体类型*/

outtextxy(250,400,"EXIT=ESC ");/*显示文本*/

}

void Close(void)

{

closegraph();

}