C语言编程中怎么添加键盘 *** 作

C语言编程中怎么添加键盘 *** 作,第1张

用getch函数,方向键有两个字节,第一个字节是-32,所以判断是-32后再取一次,上左右下72,75,77,80

#include <conio.h>

#include <stdio.h>

int main()

{

printf("请输入:")

char ch

ch = getch()

if(ch == -32)

while(1)

{

ch = getch()

switch(ch)

{

case 27:

{printf("Esc")return 0} //按esc退出

case 72:

{printf("A")break}

case 80:

{printf("B")break}

default:

break

}

}

}

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX 1000

typedef struct Lesson  //定义课程结构体

{

    int Lesson_Num

    char Lesson_Name[50]

    int Lesson_Mark

    int Lesson_Credit

}Lesson

typedef struct Student //定义学生的结构体

{

    char Name[50]

    int Num

    int Lesson_Count

    Lesson L[20]

}Student

Student S[MAX]

static int Student_Count = 0 //记录学生数的变量

void PrintInterface() //打印界面

int AddStudent() //添加,带返回值,提示 *** 作成功

int DelStudent() //删除,带返回值,提示 *** 作成功

void CheckStudent() //查学生成绩

void CheckClass() //查班成绩表

void WriteFile() //写入文本文件

void ReadFile() //读取文本文件

void main()

{

    int Choice

    while (1)

    {

        PrintInterface()

        scanf("%d%*c", &Choice) //"%*c"是吸收回车的,因为后面会输入字母类型

        if (Choice >= 0 && Choice <= 6) //选择 *** 作合法

        {

            switch (Choice)

            {

                case 0: exit(1)

                case 1:

                {

                    system("cls")

                    if (AddStudent()) printf("\n添加成功...回车继续\n")

                    else printf("\n添加失败...回车继续\n")

                    getchar()

                    getchar()

                    system("cls")

                    break

                }

                case 2:

                {

                    system("cls")

                    if (DelStudent()) printf("\n删除成功...回车继续\n")

                    else printf("\n删除失败...回车继续\n")

                    getchar()

                    getchar()

                    system("cls")

                    break

                }

                case 3:

                {

                    system("cls")

                    CheckStudent()

                    system("cls")

                    break

                }

                case 4:

                {

                    system("cls")

                    CheckClass()

                    system("cls")

                    break

                }

                case 5: WriteFile()system("cls")break

                case 6: ReadFile()system("cls")break

                default:

            }

        }

        else

        {

            printf("无此功能..重新选择..回车确定\n") //选择 *** 作非法

            getchar()

            system("cls") //清屏函数

        }

    }

}

void PrintInterface()

{

    printf("\t -------------------------- \n")

    printf("\t| 1、添加                  |\n")

    printf("\t|                          |\n")

    printf("\t| 2、删除                  |\n")

    printf("\t|                          |\n")

    printf("\t| 3、查学生成绩            |\n")

    printf("\t|                          |\n")

    printf("\t| 4、查班成绩表            |\n")

    printf("\t|                          |\n")

    printf("\t| 5、写入文本文件          |\n")

    printf("\t|                          |\n")

    printf("\t| 6、读取文本文件          |\n")

    printf("\t|                          |\n")

    printf("\t| 0、退出                  |\n")

    printf("\t -------------------------- \n")

    printf("\t选择 *** 作:")

}

int AddStudent()

{

    int S_count, i, j

    printf("\n添加中......\n")

    printf("\n添加学生人数(如1、2 ……999):")

    scanf("%d", &S_count)

    if (Student_Count + S_count >= MAX) return 0 //超过了数组上限

    for (i = Student_Count i < Student_Count + S_count i++)

    {

        printf("\n\t第%d个学生:\n", i - Student_Count + 1)

        printf("\n\t学生学号:") scanf("%d%*c", &S[i].Num)

        printf("\n\t学生姓名:") gets(S[i].Name)

        printf("\n\t该学生所修课程数:") scanf("%d", &S[i].Lesson_Count)

        for (j = 0 j < S[i].Lesson_Count j++)

        {

            printf("\n\t第%d门课:\n", j + 1)

            printf("\n\t\t课程编号:") scanf("%d%*c", &S[i].L[j].Lesson_Num)

            printf("\n\t\t课程名称:") gets(S[i].L[j].Lesson_Name)

            printf("\n\t\t课程成绩:") scanf("%d", &S[i].L[j].Lesson_Mark)

            printf("\n\t\t课程学分:") scanf("%d", &S[i].L[j].Lesson_Credit)

            if (S[i].L[j].Lesson_Mark < 60) S[i].L[j].Lesson_Credit = 0 //不及格的课程学分为0

        }

    }

    Student_Count += S_count

    return 1

}

int DelStudent()

{

    char *D_Name

    int D_Num

    int i, j

    printf("\n填写待删除学生的信息:\n")

    printf("\n学生姓名:") gets(D_Name)

    printf("\n学生学号:") scanf("%d", &D_Num)

    for (i = 0 i < Student_Count i++)

    {

        if (!strcmp(S[i].Name, D_Name) && S[i].Num == D_Num)

        {

            printf("\n找到该学生,删除中......\n")

            for (j = i + 1 j < Student_Count j++)

            {

                S[j - 1] = S[j]

            }

            break

        }

    }

    if (i == Student_Count)

    {

        printf("\n未找到该学生...请核对所填信息\n\n")

        return 0

    }

    else

    {

        Student_Count--

        return 1

    }

}

void CheckStudent()

{

    int C_Choice

    char C_Name[50]

    int C_Num

    int i, j

    printf("\n输入所查学生信息(1.姓名 \\ 2.学号)选择:")

    scanf("%d%*c", &C_Choice)

    printf("\n查找中......\n")

    if (C_Choice == 1 || C_Choice == 2) //选择合法

    {

        if (C_Choice == 1)

        {

            printf("\n姓名:") gets(C_Name)

            for (i = 0 i < Student_Count i++) //全部穷举,防止同名同姓

            {

                if (!strcmp(S[i].Name, C_Name))

                {

                    printf("\n学号:%d\t姓名:%s\n", S[i].Num, S[i].Name)

                    printf("\n课程编号\t课程名称\t课程成绩\t课程学分\n")

                    printf("-----------------------------------------------------\n")

                    for (j = 0 j < S[i].Lesson_Count j++)

                    {

                        printf("%d\t\t%s\t\t%d\t\t%d\n", S[i].L[j].Lesson_Num,

                                S[i].L[j].Lesson_Name, S[i].L[j].Lesson_Mark,

                                S[i].L[j].Lesson_Credit)

                        printf("-----------------------------------------------------\n")

                    }

                    printf("\n\n")

                }

            }

        }

        else

        {

            printf("\n学号:") scanf("%d%*c", &C_Num)

            for (i = 0 i < Student_Count i++) //不用全部穷举,学号唯一

            {

                if (S[i].Num == C_Num)

                {

                    printf("\n学号:%d\t姓名:%s\n", S[i].Num, S[i].Name)

                    printf("\n课程编号\t课程名称\t课程成绩\t课程学分\n")

                    printf("-----------------------------------------------------\n")

                    for (j = 0 j < S[i].Lesson_Count j++)

                    {

                        printf("%d\t\t%s\t\t%d\t\t%d\n", S[i].L[j].Lesson_Num,

                                S[i].L[j].Lesson_Name, S[i].L[j].Lesson_Mark,

                                S[i].L[j].Lesson_Credit)

                        printf("-----------------------------------------------------\n")

                    }

                    printf("\n\n")

                    break

                }

            }

        }

        printf("查找完毕...回车继续\n")

        getchar()

    }

    else //选择不合法

    {

        printf("选择错误...回车继续\n")

        getchar()

        return

    }

}

void CheckClass()

{

    int C_LNum

    double SSNum = 0, PassSNum = 0, SMark = 0

    int i, j

    printf("\n请输入课程编号:")

    scanf("%d%*c", &C_LNum)

    printf("\n查找中......\n\n")

    printf("学号\t姓名\t课程名称\t课程成绩\t课程学分\n")

    printf("----------------------------------------------------\n")

    for (i = 0 i < Student_Count i++)

    {

        for (j = 0 j < S[i].Lesson_Count j++)

        {

            if (S[i].L[j].Lesson_Num == C_LNum)

            {

                printf("%d\t%s\t%s\t\t%d\t\t%d\n", S[i].Num, S[i].Name, S[i].L[j].Lesson_Name,

                                            S[i].L[j].Lesson_Mark, S[i].L[j].Lesson_Credit)

                printf("----------------------------------------------------\n")

                SMark += S[i].L[j].Lesson_Mark

                SSNum ++

                if (S[i].L[j].Lesson_Mark >= 60) PassSNum++

                break

            }

        }

    }

    printf("\n平均分:%.2lf\t及格率:%.2lf%%\n\n", SMark / SSNum, PassSNum / SSNum * 100)

    printf("\n查找完毕...回车继续\n")

    getchar()

}

void WriteFile()

{

    FILE *fp

    int i, j

    char Adr[100]

    printf("\n请输入写入的文件地址:\n\n地址输入格式:例如d:\\\\Student.txt(\\\\为转义字符):")

    scanf("%s%*c", Adr)

    printf("\n写入中......\n")

    if (fp = fopen(Adr,"w")) //写入文件

    {

        fprintf(fp,"%d\n",Student_Count)

        for (i = 0 i < Student_Count i++)

        {

            fprintf(fp,"%d\t%s\t%d\n",S[i].Num, S[i].Name,S[i].Lesson_Count)

            for (j = 0 j < S[i].Lesson_Count j++)

            {

                fprintf(fp,"%d\t%s\t%d\t%d\n", S[i].L[j].Lesson_Num,

                        S[i].L[j].Lesson_Name,S[i].L[j].Lesson_Mark,

                        S[i].L[j].Lesson_Credit)

            }

        }

        printf("\n写入完成...回车继续\n")

        fclose(fp)

    }

    else

    {

        printf("\n写入失败...回车继续\n")

    }

    getchar()

}

void ReadFile()

{

    FILE *fp

    int i, j

    char Adr[100]

    printf("\n请输入读取(为防止读入错误,希望与写入文件内容格式一致)的文件地址:\n\n地址输入格式:例如d:\\\\Student.txt(\\\\为转义字符):")

    scanf("%s%*c", Adr)

    printf("\n读取中......\n")

    if (fp = fopen(Adr,"r"))

    {

        fscanf(fp,"%d",&Student_Count)

        for (i = 0 i < Student_Count i++)

        {

            fscanf(fp,"%d%s%d",&S[i].Num, &S[i].Name,&S[i].Lesson_Count)

            for (j = 0 j < S[i].Lesson_Count j++)

            {

                fscanf(fp,"%d%s%d%d",&S[i].L[j].Lesson_Num,

                        &S[i].L[j].Lesson_Name,&S[i].L[j].Lesson_Mark,

                        &S[i].L[j].Lesson_Credit)

            }

        }

        printf("\n读取成功...回车继续\n")

        fclose(fp)

    }

    else

    {

        printf("\n读取失败...回车继续\n")

    }

    getchar()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11394365.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存