Micokery九九 2021-12-12 14:59 采纳率: 91.7%
浏览 173
已结题

请编写出符合下列要求的程序(C语言)?

1.设计登录界面,输入用户名,密码,如果用户密码正确,进入菜单,如果错误,要求重新输入用户名,密码。超过三次不正确,提示,退出程序。
2.记事本里面的每条信息包括日期、时间、内容、重要程度三项信息,重要程度要求用枚举变量实现,里面包括高、中、低三项供选择。
3.记事本里面的每条信息日期、时间要求取系统时间自动生成;
4.录入功能能增加信息,主要增加内容和选择重要程度;
5.输出所有记事信息;
6.能够删除指定日期指定时间信息。

  • 写回答

2条回答 默认 最新

  • 关注

    先贴运行结果:
    (1)登录

    img

    (2)登录后的界面

    img

    (3)新增记录

    img

    (4)显示所有记录

    img

    (5)删除及删除以后的数据

    img

    img

    代码

    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    //重要程度
    enum ELevel
    {
        e_level_high,
        e_level_mid,
        e_level_low
    };
    //定义日志信息
    struct DataInfo 
    {
        char tt[20];
        char data[100];
        enum ELevel level;
    };
    
    struct DataInfo g_all[200]; //定义全局变量存储信息
    int g_nmb=0;              //日志的实际数量
    int login()
    {
        char user[]="zhangsan";
        char password[]="123";
        char un[30],pwd[30];
        int tms=0;
        printf("请输入用户名:");
        while(tms <3)
        {
            scanf("%s",un);
            if(strcmp(un,user)==0)
                break;
            else
            {
                tms++;
                if(tms==3)
                {
                    printf("输入错误超过3次,退出程序");
                    system("pause");
                    return 0;
                }
                else
                    printf("用户名输入错误,请重新输入:");
            }
        }
        tms = 0;
        printf("请输入密码:");
        while(tms <3)
        {
            scanf("%s",pwd);
            if(strcmp(pwd,password)==0)
                break;
            else
            {
                tms++;
                if(tms==3)
                {
                    printf("输入错误超过3次,退出程序");
                    system("pause");
                    return 0;
                }
                else
                    printf("用户名输入错误,请重新输入:");
            }
        }
        printf("欢迎使用本系统!\n");
        system("pause");
        return 1;
    }
    //菜单
    int menu()
    {
        int opt;
        system("cls"); //清屏
        printf("1.新增记录\n");
        printf("2.输出所有信息\n");
        printf("3.删除指定信息\n");
        printf("4.退出系统\n");
        printf("请输入您的选择:");
        scanf("%d",&opt);
        return opt;
    }
    void gettmstr(char now_date[])
    {
        time_t rawtime;
        struct tm * timeinfo;
        time ( &rawtime );
        timeinfo = localtime ( &rawtime );
        sprintf(now_date,"%04d-%02d-%02d %02d:%02d:%02d",(1900+timeinfo->tm_year),(1+timeinfo->tm_mon),
            timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
        now_date[19] = 0;
    }
    //清空输入缓存
    void safe_flush(FILE *fp)
    {
        int ch;
        while( (ch = fgetc(fp)) != EOF && ch != '\n' );
    }
    //插入数据
    void insertData()
    {
        struct DataInfo dt;
        int level;
        system("cls");
        gettmstr(dt.tt);
        printf("请输入需要插入的内容:");
        safe_flush(stdin); //清空输入缓存
        gets(dt.data);
        printf("请选择日志等级:(2:高 1:中 0:低)");
        while(1)
        {
            scanf("%d",&level);
            if(level>=0 && level<=2)
                break;
            else
                printf("请输入0-2之间的数:");
        }
        if(level == 2)
            dt.level = e_level_high;
        else if(level == 1)
            dt.level = e_level_mid;
        else
            dt.level = e_level_low;
        g_all[g_nmb++] = dt;
        printf("插入成功\n");
        system("pause");
    }
    //显示全部数据
    void showAll()
    {
        int i=0;
        system("cls");
        printf("日期               等级          内容\n");
        for (i=0;i<g_nmb;i++)
        {
            printf("%s ",g_all[i].tt);
            if(g_all[i].level == e_level_high)
                printf("高 ");
            else if (g_all[i].level == e_level_mid)
                printf("中 ");
            else
                printf("低 ");
            printf("%s\n",g_all[i].data);
        }
        system("pause");
    }
    //是否包含字符串
    int findstr(char*big ,char* smal)
    {
        int i,j,lenb,lens;
        int nmb = 0;
        lenb = strlen(big);
        lens = strlen(smal);
        nmb = 0;
        if(lens > lenb)
            return 0;
        i = 0;
        while(i < lenb-lens+1)
        {
            for (j = 0; j < lens;j++)
            {
                if(big[i+j] != smal[j]) 
                    break;
            }
            if (j == lens) //说明找到
            {
                nmb++;
                return 1;
                i += lens;
            }else
                i++;
        }
        return 0;
    }
    
    //删除指定数据
    void del()
    {
        char buf[100]={0};
        char tt[20]={0};
        int i,j,k,nmb=0,op=0;
        system("cls");
        printf("请输入需要删除的日志日期(如:2021-02-03 20:00、2021-02-03 20、2021-02-03):");
        gets(tt);
        safe_flush(stdin);
        printf("满足条件的记录有:\n");
        //输出所有符合要求的数据
        for (i=0;i<g_nmb;i++)
        {
            if(findstr(g_all[i].tt,tt))
            {
                nmb++;
                printf("(%d) ",nmb);
                printf("%s ",g_all[i].tt);
                if(g_all[i].level == e_level_high)
                    printf("高 ");
                else if (g_all[i].level == e_level_mid)
                    printf("中 ");
                else
                    printf("低 ");
                printf("%s\n",g_all[i].data);
            }
        }
        if(nmb == 0)
        {
            printf("未找到改日期的日志");
            system("pause");
            return ;
        }
        printf("请输入需要删除的日志序号:");
        while(1)
        {
            scanf("%d",&op);
            if(op >=1 && op <= nmb)
                break;
            else
                printf("未找到该序号的日志,请重新输入:");
        }
        //删除
        k=0;
        for (i=0;i<g_nmb;i++)
        {
            if(findstr(g_all[i].tt,tt))
            {
                k++;
                if(k == op)
                {
                    for(j=i;j<g_nmb-1;j++)
                        g_all[j] = g_all[j+1];
                    g_nmb -=1;
                    printf("删除成功!\n");
                    break;
                }
            }
        }
        system("pause");
    }
    //处理登录后的事物
    void deal()
    {
        int opt;
        while(1)
        {
            opt = menu();
            switch(opt)
            {
            case 1:
                insertData();
                break;
            case 2:
                showAll();
                break;
            case 3:
                del();
                break;
            case 4:
                printf("谢谢使用,再见!\n");
                system("pause");
                return ;
            }
        }
    }
    
    int main()
    {
        int opt;
        printf("--------------------------------\n");
        printf("    欢迎使用记事本系统          \n");
        printf("       1.登录                   \n");
        printf("       2.退出                   \n");
        printf("--------------------------------\n");
        printf("请输入您的选择:");
        scanf("%d",&opt);
        switch(opt)
        {
        case 1:
            if(login())
                deal();
            break;
        case 2:
            printf("谢谢使用,再见!\n");
            system("pause");
            return 0;
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月13日
  • 已采纳回答 12月13日
  • 创建了问题 12月12日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程