有很多功能的课程表,C语言大作业300行

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <time.h>
#include <windows.h>
#include<mmsystem.h>
#pragma comment(lib,"Winmm.lib")

int savecourse();
void change();
void newcourse();
void print();
char course[99][99][99];
int MultiplicationTable(); 
int common_mon[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int   leap_mon[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
void color(const unsigned short textColor)
{
    if(textColor>=0 && textColor<=15)
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), textColor);
    else
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}

void menu()
{
    printf("╔══════════════学生系统菜单══════════════╗\n"); 
    printf("║---------------1.显示课表---------------║\n");
    printf("║---------------2.修改课表---------------║\n");
    printf("║---------------3.新建课表---------------║\n");
    printf("║---------------4.系统时间---------------║\n");
    printf("║---------------5.数学计算---------------║\n");
    printf("║---------------6.乘法口诀---------------║\n");
    printf("║---------------7.公元年历---------------║\n");
    printf("║---------------8.版本信息---------------║\n");
    printf("║---------------9.制作人员---------------║\n");
    printf("╚═══════════════0.退出程序═══════════════╝\n");
}


void print()
{
    FILE *fp;
    char time[5][99]={"1-2节(8:00-9:40)","3-4节(10:15-11:55)","5-6节(14:00-15:40)","7-8节(16:15-17:55)","9-10节(19:00~20:40)"};
    int i,j;
    if((fp=fopen("course.txt","r"))==NULL)
    {
        printf("课表文件不存在,即将创建空课表\n");
        savecourse();
    }
    printf("-----------------------------------------------------------------------------------------------------------\n");
    printf("星期                     一           二           三           四           五           六           日\n");
    printf("-----------------------------------------------------------------------------------------------------------\n");
    for(i=0;i<6;i++)
    {
        printf("%10s\t",time[i]);
        for(j=0;j<7;j++)
        {
            fscanf(fp,"%s",course[i][j]);
            printf("%-13s",course[i][j]);
        }
    printf("\n");
    printf("-----------------------------------------------------------------------------------------------------------\n");
    }
    fclose(fp);
    printf("\n\n");

}

void change()
{
    char temp[10];
    char s;
    int date,time;
    char recourse[20];
    printf("输入你想要改的课程时间:");
    scanf("%d",&date);
    while(date<1||date>7)
    {
        printf("输入时间不合理,重新输入");
        scanf("%d",&date);
    }
    printf("输入你想要改的课程课次:");
    scanf("%d",&time);
    while(date<1||date>7)
    {
        printf("输入时间不合理,重新输入");
        scanf("%d",&time);
    }
    printf("你要将原来的课程修改为:");
    scanf("%s",recourse);
    strcpy(temp,recourse);
    getchar();
    strcpy(course[time-1][date-1],recourse);
    printf("请输入1确认保存:");
    scanf("%c",&s);
    if(s=='1')
    savecourse();
    else
    {
        strcpy(course[time-1][date-1],temp);
    }
}

int savecourse()
{
    FILE *fp;
    int i,j;
    if((fp=fopen("course.txt","w+"))==NULL)
    {
        fp = fopen("course.txt","w+");
        printf("未找到课程表文件,已创建新文件,请重新打开程序以初始化");
        exit(1);
    }
    for(i=0;i<6;i++)
    {
        for(j=0;j<7;j++)
            fprintf(fp,"%-13s",course[i][j]);
        fprintf(fp,"\n");
    }
    fclose(fp);
    printf("保存成功!\n");
}

void newcourse()
{
    int i,j;
    printf("请一次输入一周的课程按回车开始\n");
    for(i=0;i<7;i++)
    {
        printf("请按从早到晚的顺序输入第%d天的课程",i+1);
        for(j=0;j<5;j++)
            scanf("%s",course[j][i]);
    }
    savecourse();
}
int PCtime()
    { 
        time_t  t;
         struct  tm  * lt;
         time  (&t);
         lt =  localtime  (&t);
         printf  (  "%d/%d/%d %d:%d:%d\n" ,lt->tm_year+1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec);           
    }
int calculator()
    {
    float a,b,c;
    char d;
    int sign=0;
    printf("输入数字与字符并按回车进行计算,进行一次计算后程序自动退出\n");
    scanf("%f%c%f",&a,&d,&b);
    if(d=='+'){
        c=a+b;
    }
    else if(d=='-'){
        c=a-b;
    }
    else if(d=='*'){
        c=a*b;
    }
    else if(d=='/'&&b!=0) {
        c=a/b;
    }
    else if(d=='/'&&b==0) {
        printf("dat is 0!Error!\n");
    }
    else {
        printf("Error!\n");
    }
    printf("%.2f%c%.2f=%.2f\n",a,d,b,c);
}
int MultiplicationTable()
{
  int i,j,k;
  for(i=1;i<=9;i++)
    {
      for(k=1;k<i;k++)
        printf("    ");
      for(j=i;j<=9;j++)
        {
          printf("%4d",i*j);
        }
      printf("\n");
    }
}
void printBlank(int n)
{
    if(n==7) n=0;
    for(int i=0; i<n; i++)
        printf("      ");
}
void printCalendar(int weekday, int *p)
{
    for(int i=0; i<12; i++){
        printf("=================%d月=====================\n", i+1);
        printf("Sun  Mon   Tue   Wed   Thu   Fri   Sat\n");
        printBlank(weekday);
        for(int j=1; j<=p[i]; j++){
            printf("%-6d", j);
            if(weekday==6) printf("\n");
            weekday++;
            if(weekday==8) weekday=1;
        }
        printf("\n\n");
    }
}
int calender()
{
    int y;
    int sign=1;
    printf("请输入要查询的公元年份(大于公元一年):"); 
    while(scanf("%d", &y)!=EOF){
        int temp = 1;
        for(int i=1; i<=y; i++){
            if(temp > 7) temp -= 7;
            if((i%4==0&&i%100!=0)||i%400==0){
                if(i==y) printCalendar(temp, leap_mon);
                temp += 2;
            }
            else{
                if(i==y) printCalendar(temp, common_mon);
                temp++;
            }
        }
    break;
    }
}
void main()

    printf("**********欢迎使用21世纪学生终端**********\n");
    
    printf("*************当前版本v0.10.6α*************\n");
    
    int select;
    
    int sign=1;
    
    char contin;
    
    FILE *fp;
    
    int i,j;
    
    if((fp=fopen("course.txt","r"))==NULL)
    
    {
        
        printf("文件夹中没有课程表文件,请先输入1或3进行新建课表\n");
        
    }
    
    for(i=0;i<6;i++)
    
    {
        for(j=0;j<7;j++)
            fscanf(fp,"%s",course[i][j]);

    }
    fclose(fp);
    while(sign)
    {
        menu();
        printf("请输入操作:");
        scanf("%d",&select);
        while(select<0||select>9)
        {
            printf("你输入的操作不合法,请重新输入");
            scanf("%d",&select);

        }
            switch(select)
        {
           case 1:print();break;
           case 2:change();sign=1;break;
           case 3:newcourse();break;
           case 4:PCtime();sign=1;break;
           case 5:calculator();sign=1;break;
           case 6:MultiplicationTable();sign=1;break;
           case 7:calender();sign=1;break;
           case 8:printf("当前版本0.10.6α\n");
                     printf("v0.10.1α------第一个能用的版本,只有课程表功能,可以修改并保存课程表,需要手动创建课程表文件\n"); 
                     printf("v0.10.2α------检测到缺少课程表文件可以自动创建,并要求输入课表\n"); 
                     printf("v0.10.3α------添加时钟功能,但是无法实时显示\n");
                     printf("v0.10.4α------添加计算器,对文本进行小修改以改善美观度\n");
                     printf("v0.10.5α------更改了题头出现次数,现在它只会出现一次\n");
                     printf("v0.10.6α------添加万年历功能,可以输出任意公元后的公元年历\n");
                     break; 
           case 9:color(14);
                     printf("作者:\n");
                     printf("淡水鱼\n");
                     color(2);
                     printf("特别鸣谢:\n");
                     color(4);
                     printf("超逊的彬彬\n");
                     color(3);
                     printf("Su_Peng\n");
                     color(6);
                     printf("Febrie(>﹏<)\n");
                     color(9);
                     printf("横扫八方狂龙杀神\n");
                     color(12);
                     printf("三木\n");
                     color(16);
                     break; 
           case 0:printf("程序已退出");sign=0;break;
           default:break;
        }
    }
}

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值