c语言程序设计,求文件压缩包

img


一个比较简单的程序设计,但是功能比较多,行数不少于250行,要在周末之前

主要是输入输出和文件操作,运行截图如下:

img

img

查看记录

img

删除记录:

img

修改后的代码,去掉空行和注释,差不多能够250行了

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int readFile(int *pwin , int *plose , int *pev);
void startgame(int *win , int *lose , int *ev );
void showRecord(int win, int lose, int ev);
void DeleteRord(int* win, int* lose, int* ev);
void saveRecord(int win, int lose, int ev);
int main()
{
    int flag=1;
    int i = 0;
    char choise;
    int win = 0, lose = 0, ev = 0; //记录胜利局数、失败局数、平手局数
    srand((unsigned int)time(NULL)); //生成随机数种子
    readFile(&win,&lose,&ev); //读取文件
    //显示菜单
    while (flag)
    {
        system("cls"); //清屏
        printf("------------------------\n");
        printf("|----------------------|\n");
        printf("|石头剪刀布游戏        |\n");
        printf("|                      |\n");
        printf("|a.进入比赛            |\n");
        printf("|b.查看比赛记录        |\n");
        printf("|c.删除比赛记录        |\n");
        printf("|d.比赛退出            |\n");
        printf("|----------------------|\n");
        rewind(stdin); //清空输入缓存 
        //fflush(stdin); //清空输入缓存,如果rewind报错,就使用fflush
        scanf("%c", &choise);
        getchar();
        switch (choise)
        {
        case 'a':
            startgame(&win, &lose, &ev);
            break;
        case 'b':
            showRecord(win, lose, ev);
            break;
        case 'c':
            DeleteRord(&win, &lose, &ev);
            break;
        case 'd':
            saveRecord(win, lose, ev);
            printf("游戏正在退出,感谢使用,下次再见!\n");
            flag = 0;
            break;
        }
    }
    return 0;    
}

//读文件,获取文件中的数据信息
int readFile(int *pwin , int *plose , int *pev)
{
    int i=0;
    int win=0,lose=0,ev=0;
    char buf[100];
    //读文件,获取历史记录
    FILE* fp =0;
    fp = fopen("record.txt", "r");
    if (fp == 0)
    {
        printf("文件打开失败!\n");
        return 0;
    }
    else
    {
        fgets(buf,100,fp); //读取第一行
        //解析出胜利局数
        while (buf[i])
        {
            if (buf[i] >= '0' && buf[i] <= '9')
                win = win * 10 + buf[i] - '0';
            i++;
        }
        fgets(buf, 100, fp); //读取第二行
        //解析出输的局数
        i = 0;
        while (buf[i])
        {
            if (buf[i] >= '0' && buf[i] <= '9')
                lose = lose * 10 + buf[i] - '0';
            i++;
        }
        fgets(buf, 100, fp); //读取第三行
        //解析出平局的局数
        i = 0;
        while (buf[i])
        {
            if (buf[i] >= '0' && buf[i] <= '9')
                ev = ev * 10 + buf[i] - '0';
            i++;
        }
        //关闭文件
        fclose(fp);
        *pwin = win;
        *plose = lose;
        *pev = ev;
        return 1;
    }
}

//开始比赛
void startgame(int *win , int *lose , int *ev )
{
    int op; //用户的选择
    int jq; //机器的随机数
    system("cls"); //清屏
    printf("------------------------\n");
    printf("|----------------------|\n");
    printf("|石头剪刀布游戏        |\n");
    printf("|                      |\n");
    printf("|用户操作:            |\n");
    printf("|0表示石头             |\n");
    printf("|1表示剪刀             |\n");
    printf("|2表示布               |\n");
    printf("|3回到主界面           |\n");
    printf("|----------------------|\n");
    printf("请输入:");
    while (1)
    {
        scanf("%d", &op);
        if (op >= 0 && op <= 3)
            break;
        else
            printf("请输入0-3之间的数字:");
    }
    if (op == 3)
        return;
    else
    {
        jq = rand() % 3; //产生0到2的随机数
        if (op == 0) //用户出石头
        {
            printf("用户出石头,");
            if (jq == 0) //机器出石头
            {
                printf("机器出石头,平局\n");
                *ev += 1; //平局
            }            
            else if (jq == 1) //机器出剪刀
            {
                printf("机器出剪刀,胜利\n");
                *win += 1; //胜利
            }                
            else
            {
                printf("机器出布,输\n");
                *lose += 1; //输
            }
        }
        else if (op == 1) //用户出剪刀
        {
            printf("用户出剪刀,");
            if (jq == 0) //机器出石头
            {
                printf("机器出石头,输\n");
                *lose += 1; //输
            }                
            else if (jq == 1) //机器出剪刀
            {
                printf("机器出剪刀,平局\n");
                *ev += 1; //平局
            }
            else //机器出布
            {
                printf("机器出布,胜利\n");
                *win += 1; //胜利
            }
        }
        else //用户出布
        {
            printf("用户出布,");
            if (jq == 0) //机器出石头
            {
                printf("机器出石头,胜利\n");
                *win += 1; //胜利
            }
            else if (jq == 1) //机器出剪刀
            {
                printf("机器出剪刀,输\n");
                *lose += 1; //输
            }
            else //机器出布
            {
                printf("机器出布,平局\n");
                *ev += 1; //平局
            }
        }
    }
    system("pause");
}
//查看比赛记录
void showRecord(int win, int lose, int ev)
{
    system("cls"); //清屏
    printf("------------------------\n");
    printf("|----------------------|\n");
    printf("|石头剪刀布游戏        |\n");
    printf("|                      |\n");
    if (win == 0 && lose == 0 && ev == 0)
        printf("|目前尚无记录          |\n");
    else
    {
        printf("|胜利:%d            |\n", win);
        printf("|  输:%d            |\n", lose);
        printf("|平局:%d            |\n", ev);
        printf("|----------------------|\n");
    }
    system("pause");
}
//删除记录
void DeleteRord(int* win, int* lose, int* ev)
{
    char ch;
    FILE* fp = 0;
    system("cls");
    printf("确定要删除吗(Y/N)?");
    rewind(stdin);
    ch = getchar();
    getchar(); //吸收回车符
    if(ch != 'Y' || ch != 'y')
        return;
    //将记录清零
    *win = 0;
    *lose = 0;
    *ev = 0;
    //更新文件中的记录
    fp = fopen("record.txt", "w");
    fprintf(fp,"胜利:%d\n", *win);
    fprintf(fp,"  输:%d\n", *lose);
    fprintf(fp,"平局:%d\n", *ev);
    fclose(fp);
    system("cls");
    printf("------------------------\n");
    printf("|----------------------|\n");
    printf("|石头剪刀布游戏        |\n");
    printf("|                      |\n");
    printf("|记录删除成功!        |\n");
    printf("|----------------------|\n");
    system("pause");
}

//保存记录
void saveRecord(int win, int lose, int ev)
{
    FILE* fp = 0;
    //打开记录文件,并将记录写入文件中
    fp = fopen("record.txt", "w");
    if(fp == 0)
    {
        printf("文件未能打开,数据保存失败\n");
        return;
    }
    fprintf(fp, "胜利:%d\n", win);
    fprintf(fp, "  输:%d\n", lose);
    fprintf(fp, "平局:%d\n", ev);
    printf("记录已保存到record.txt文件\n");
    fclose(fp);
    fp = 0;
}


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <conio.h>

void menu1()
{
    printf("---------------||主菜单||--------------\n");
    printf("a.进入比赛\n");
    printf("b.查看比赛记录\n");
    printf("c.删除比赛记录\n");
    printf("d.比赛退出\n");
    printf("---------------------------------------\n");
}

void menu2()
{
    printf("--------------||石头剪刀布游戏||------------\n");
    printf("用户操作:\n");
    printf("0.表示石头\n");
    printf("1.表示剪刀\n");
    printf("2.表示布\n");
    printf("3.回到主界面\n");
    printf("--------------------------------------------\n");
}

void menu3(int win, int lose, int deuce)
{
    printf("--------------||石头剪刀布游戏||------------\n");
    printf("胜利:%d\n", win);
    printf("输:%d\n", lose);
    printf("平手:%d\n", deuce);
    printf("--------------------------------------------\n");
}

int main(void)
{
    char Human,Computer,select;
    int i,j,win=0,lose=0,deuce=0,result;
    srand(time(NULL));
    void menu1();              //菜单函数1.2.3的声明
    void menu2();
    void menu3();
    while (1)
    {
        menu1();
        printf("请做出你的选择:");
        select = getch();
        if (select == 'a'){
            //进入比赛
            while(1)
            {
                menu2();
                printf("请做出你的选择:");
                Human = getch();
                if (Human=='3') break;
                switch(Human)     //判断开始游戏的真正对弈,人的主动选择
                {
                    case '0': printf("你 石头VS");break;
                    case '1': printf("你 剪刀VS");break;
                    case '2': printf("你 布VS");break;
                }
                Computer = rand()%3 + 48;
                switch(Computer)       //电脑的随机选择
                {
                    case '0': printf("石头 电脑\n");break;
                    case '1': printf("剪刀 电脑\n");break;
                    case '2': printf("布 电脑\n");break;
                }
                result=Human-Computer;    //游戏结果的运算
                switch(result)
                {
                    case 0:deuce++;printf("----平手----\n");break;
                    case -1:case 2:win++;printf("----胜利----\n");break;
                    case 1:case -2:lose++;printf("----输----\n");break;
                }
            }
        }else if (select == 'b'){
            //查看比赛记录
            menu3(win,lose,deuce);
        }else if (select == 'c'){
            //删除比赛记录
            win=0,lose=0,deuce=0;
            printf("已删除数据\n");
        }else if (select == 'd'){
            //比赛退出
            break;
        }else{
            printf("请输入正确选择:a b c d\n");
        }
    }// end while
    return 0; // return
}// end main

img


#include<stdio.h>
#include<time.h>
int a[3];       //定义一个全局变量数组保存输赢以及平局数,a[0]:赢;a[1]:输;a[2]:平局;
char menu()
{
    char choose;
    printf("                                                                       功能选择                             \n");
    printf("                                                                   a.进入比赛\n");
    printf("                                                                   b.查看比赛记录\n");
    printf("                                                                   c.删除比赛记录\n");
    printf("                                                                   d.比赛退出\n");
    scanf("%c", &choose,2);
    return choose;
}
void EnterGame()
{
    int man_guess,robot_guess;
    printf("------------------------------------------------------------------------------------------------------------------------------\n");
    printf("|-----------------------------------------------------------------------------------------------------------------------------|\n");
    printf("                                                                   石头剪刀布游戏\n");
    printf("用户操作:\n                      0代表:石头\t1代表:剪刀\t2代表:布\t3表示:返回主界面\n");
    printf("                                                                       请猜拳:");
    scanf("%d", &man_guess);   //电脑猜拳 0:石头,1:剪刀,2:布。输入3返回主界面
    getchar();
    robot_guess = rand() % 4;   //电脑猜拳 0:石头,1:剪刀,2:布
    if (man_guess == 3)
        goto L1;  //因为不能在if语句中直接break,因此通过在switch中break,然后回到主界面
    else
    {
        switch (man_guess)
        {
        case 0:       //用户猜拳为:石头
            if (robot_guess == 0)
                a[2]++;
            else if (robot_guess == 1)
                a[0]++;
            else
                a[1]++;
            break;
        case 1:       //用户猜拳为:剪刀
            if (robot_guess == 0)
                a[1]++;
            else if (robot_guess == 1)
                a[2]++;
            else
                a[1]++;
            break;
        case 2:       //用户猜拳为:布
            if (robot_guess == 0)
                a[0]++;
            else if (robot_guess == 1)
                a[2]++;
            else
                a[1]++;
            break;
        default:
            printf("错误输入!请重新输入0~3之间的数字!!!!!!!!!!!");
        L1:
            break;
        }
    }
    printf("\n");
}
void GameRecord()
{
    printf("                                                                     您的游戏记录为:\n");
    printf("                                                                        胜利:%d\n", a[0]);
    printf("                                                                         输 :%d\n", a[1]);
    printf("                                                                        平局:%d\n", a[2]);
    getchar();
}
void DelRecord()
{
    int i;
    for (i = 0; i < 3; i++)
        a[i] = 0;
    printf("成功删除记录!!!!!!!!!!!\n\n");
    getchar();
}
int main()
{
    srand(time(NULL));
    while (1)
    {
        char choose;
        choose = menu(); //执行输出主界面功能并返回功能选择指令
        switch ((int)(choose-'a'))
        {
        case 0:
            EnterGame();
            break;
        case 1:
            GameRecord();
            break;
        case 2:
            DelRecord();
            break;
        case 3:
            printf("谢谢使用!\n");
            system("pause");
            exit();
        default:
            printf("输入错误,请重新输入!!!!!!!!!!!\n");
            break;
        }
    }
    return 0;
}

img

代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//开始比赛
void startgame(int *win , int *lose , int *ev )
{
int op; //用户的选择
int jq; //机器的随机数
system("cls"); //清屏
printf("------------------------\n");
printf("|----------------------|\n");
printf("|石头剪刀布游戏 |\n");
printf("| |\n");
printf("|用户操作: |\n");
printf("|0表示石头 |\n");
printf("|1表示剪刀 |\n");
printf("|2表示布 |\n");
printf("|3回到主界面 |\n");
printf("|----------------------|\n");

printf("请输入:");
while (1)
{
    scanf("%d", &op);
    if (op >= 0 && op <= 3)
        break;
    else
        printf("请输入0-3之间的数字:");
}


if (op == 3)
    return;
else
{
    jq = rand() % 3; //产生02的随机数

    if (op == 0) //用户出石头
    {
        printf("用户出石头,");
        if (jq == 0) //机器出石头
        {
            printf("机器出石头,平局\n");
            *ev += 1; //平局
        }            
        else if (jq == 1) //机器出剪刀
        {
            printf("机器出剪刀,胜利\n");
            *win += 1; //胜利
        }                
        else
        {
            printf("机器出布,输\n");
            *lose += 1; //输
        }

    }
    else if (op == 1) //用户出剪刀
    {
        printf("用户出剪刀,");
        if (jq == 0) //机器出石头
        {
            printf("机器出石头,输\n");
            *lose += 1; //输
        }                
        else if (jq == 1) //机器出剪刀
        {
            printf("机器出剪刀,平局\n");
            *ev += 1; //平局
        }
        else //机器出布
        {
            printf("机器出布,胜利\n");
            *win += 1; //胜利
        }

    }
    else //用户出布
    {
        printf("用户出布,");
        if (jq == 0) //机器出石头
        {
            printf("机器出石头,胜利\n");
            *win += 1; //胜利
        }
        else if (jq == 1) //机器出剪刀
        {
            printf("机器出剪刀,输\n");
            *lose += 1; //输
        }
        else //机器出布
        {
            printf("机器出布,平局\n");
            *ev += 1; //平局
        }

    }
}

system("pause");

}

//查看比赛记录
void showRecord(int win, int lose, int ev)
{
system("cls"); //清屏
printf("------------------------\n");
printf("|----------------------|\n");
printf("|石头剪刀布游戏 |\n");
printf("| |\n");

if (win == 0 && lose == 0 && ev == 0)
    printf("|目前尚无记录          |\n");
else
{
    printf("|胜利:%d            |\n", win);
    printf("|  输:%d            |\n", lose);
    printf("|平局:%d            |\n", ev);
    printf("|----------------------|\n");
}

system("pause");

}
//删除记录
void DeleteRord(int* win, int* lose, int* ev)
{
FILE* fp = 0;
//将记录清零
*win = 0;
*lose = 0;
*ev = 0;
//更新文件中的记录
fp = fopen("record.txt", "w");
fprintf(fp,"胜利:%d\n", *win);
fprintf(fp," 输:%d\n", *lose);
fprintf(fp,"平局:%d\n", *ev);
fclose(fp);
system("cls");
printf("------------------------\n");
printf("|----------------------|\n");
printf("|石头剪刀布游戏 |\n");
printf("| |\n");
printf("|记录删除成功! |\n");
printf("|----------------------|\n");
system("pause");

}

//保存记录
void saveRecord(int win, int lose, int ev)
{
FILE* fp = 0;
//打开记录文件,并将记录写入文件中
fp = fopen("record.txt", "w");
fprintf(fp, "胜利:%d\n", win);
fprintf(fp, " 输:%d\n", lose);
fprintf(fp, "平局:%d\n", ev);
fclose(fp);
fp = 0;
}

int main()
{
int flag=1;
int i = 0;
char choise;
char buf[100];
int win = 0, lose = 0, ev = 0; //记录胜利局数、失败局数、平手局数

srand((unsigned int)time(NULL)); //生成随机数种子

//读文件,获取历史记录
FILE* fp = fopen("record.txt", "r");
if (fp == 0)
{
    printf("文件打开失败!\n");
    //第一次时,如果文件不存在,则继续执行,会在游戏结束时自动创建记录文件
    //return 0;
}
else
{
    fgets(buf,100,fp); //读取第一行
    //解析出胜利局数
    while (buf[i])
    {
        if (buf[i] >= '0' && buf[i] <= '9')
            win = win * 10 + buf[i] - '0';
        i++;
    }

    fgets(buf, 100, fp); //读取第二行
    //解析出输的局数
    i = 0;
    while (buf[i])
    {
        if (buf[i] >= '0' && buf[i] <= '9')
            lose = lose * 10 + buf[i] - '0';
        i++;
    }

    fgets(buf, 100, fp); //读取第三行
    //解析出平局的局数
    i = 0;
    while (buf[i])
    {
        if (buf[i] >= '0' && buf[i] <= '9')
            ev = ev * 10 + buf[i] - '0';
        i++;
    }

    //关闭文件
    fclose(fp);
}


//显示菜单
while (flag)
{
    system("cls"); //清屏
    printf("------------------------\n");
    printf("|----------------------|\n");
    printf("|石头剪刀布游戏        |\n");
    printf("|                      |\n");
    printf("|a.进入比赛            |\n");
    printf("|b.查看比赛记录        |\n");
    printf("|c.删除比赛记录        |\n");
    printf("|d.比赛退出            |\n");
    printf("|----------------------|\n");

    rewind(stdin); //清空输入缓存 
    //fflush(stdin); //清空输入缓存,如果rewind报错,就使用fflush
    scanf("%c", &choise);
    getchar();
    switch (choise)
    {
    case 'a':
        startgame(&win, &lose, &ev);
        break;
    case 'b':
        showRecord(win, lose, ev);
        break;
    case 'c':
        DeleteRord(&win, &lose, &ev);
        break;
    case 'd':
        saveRecord(win, lose, ev);
        flag = 0;
        break;
    }

}
return 0;    

}