C语言实现课程表

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

char course[99][99][99];

void menu() //菜单显示
{
    printf("************这是周晗的课程作业*************\n");
    printf("***************课表系统菜单****************\n");
    printf("***************1.显示课表******************\n");
    printf("***************2.修改课表******************\n");
    printf("***************3.保存课表******************\n");
    printf("***************4.新建课表******************\n");
    printf("***************5.查看当前课程**************\n");
    printf("***************0.退出**********************\n");
}


void print()  //课程表输出函数
{
    FILE *fp;
    char time[6][99]={"1-2节(8:00~9:40)","3-4节(10:10~11:50)","5-6节(13:45~15:25)","7-8节(15:55~17:35)","9-10节(19:00~20:00)","11-12节(20:00~21:00)"};//设置时间
    int i,j;
    if((fp=fopen("E:\\course.txt","r"))==NULL)
    {
        printf("can't open this file\n");
        exit(1);
    }
    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);
    //recenttime();
    printf("\n\n");

}

void change()//修改函数
{
    char temp[10];
    char s;
    int date,time;
    char recourse[20];
    printf("输入你想要改的课程时间(星期1~7)");
    scanf("%d",&date);
    while(date<1||date>7)
    {
        printf("输入时间不合理,重新输入");
        scanf("%d",&date);
    }
    printf("输入你想要改的课程课次(1~6),注:如果没课请输入无");
    scanf("%d",&time);
    while(date<1||date>6)
    {
        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("E:\\course.txt","w"))==NULL)
    {
        printf("can't open this file");
        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天的课程,每天6节课,注:如果没课请输入无:",i+1);
        for(j=0;j<6;j++)
            scanf("%s",course[j][i]);
    }
    savecourse();
}



void recenttime()
{
  struct tm *ptr;
time_t it;
int y,d,m,iWeek,h,min,l,c;
char s[99];
it=time(NULL);
ptr=localtime(&it);
y=ptr->tm_year+1900;
d=ptr->tm_mday;
m=ptr->tm_mon+1;
h=ptr->tm_hour;
min=ptr->tm_min;                                                              //时间转换程序
printf("当前时间为%4d年%02d月%02d日 %d:%d:%d ",ptr->tm_year+1900,ptr->tm_mon+1,ptr->tm_mday,ptr->tm_hour,ptr->tm_min,ptr->tm_sec);
 iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
    switch(iWeek)
    {
    case 0: strcpy(s,"星期一");printf("%s\n",s); break;
    case 1: strcpy(s,"星期二");printf("%s\n",s); break;
    case 2: strcpy(s,"星期三");printf("%s\n",s); break;
    case 3: strcpy(s,"星期四");printf("%s\n",s); break;
    case 4: strcpy(s,"星期五");printf("%s\n",s); break;
    case 5: strcpy(s,"星期六");printf("%s\n",s); break;
    case 6: strcpy(s,"星期天");printf("%s\n",s); break;
    }
    if((h<8||h>19)||h==9||h==11||h==12||h==13||h==15||h==17||h==18)
    {
        printf("当前无课");exit(1);
    }
    switch(h)
    {
        case 8:l=0;break;
        case 10:l=1;break;
        case 13:l=2;break;
        case 15:l=3;break;
        case 19:l=4;break;
        case 20:l=5;break;
    }
    if(strcmp(s,"星期一")==0) c=0;
    if(strcmp(s,"星期二")==0) c=1;
    if(strcmp(s,"星期三")==0) c=2;
    if(strcmp(s,"星期四")==0) c=3;
    if(strcmp(s,"星期五")==0) c=4;
    if(strcmp(s,"星期六")==0) c=5;
    if(strcmp(s,"星期天")==0) c=6;

    printf("要上的课程为 %s\n",course[l][c]);

}




int main()
{
    int select;
    int sign=1;
    char contin;
    FILE *fp;
    int i,j;
    if((fp=fopen("E:\\course.txt","r"))==NULL)
    {
        printf("文件夹中没有课程表文件,请先输入4进行新建课表\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>5)
        {
            printf("你输入的操作不合法,请重新输入");
            scanf("%d",&select);

        }
            switch(select)
        {
           case 1:print();break;
           case 2:change();sign=1;break;
           case 3:savecourse();break;
           case 4:newcourse();break;
           case 5:recenttime();break;
           case 0:printf("谢谢使用");sign=0;break;
           default:break;
        }
    }

}

在这里插入图片描述

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴回答你关于C语言课程设计的问题!链表是一种常用的数据结构,可以用来实现学生信息管理系统。下面是一个简单的示例代码,实现了学生信息的添加、查找和删除功能: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct student { char name[50]; int age; struct student* next; } Student; Student* createStudent(char name[], int age) { Student* newStudent = (Student*)malloc(sizeof(Student)); strcpy(newStudent->name, name); newStudent->age = age; newStudent->next = NULL; return newStudent; } void addStudent(Student** head, char name[], int age) { Student* newStudent = createStudent(name, age); if (*head == NULL) { *head = newStudent; } else { Student* temp = *head; while (temp->next != NULL) { temp = temp->next; } temp->next = newStudent; } printf("学生 %s 添加成功\n", name); } void findStudent(Student* head, char name[]) { if (head == NULL) { printf("学生信息为空\n"); return; } Student* temp = head; while (temp != NULL) { if (strcmp(temp->name, name) == 0) { printf("找到学生 %s,年龄:%d\n", name, temp->age); return; } temp = temp->next; } printf("未找到学生 %s\n", name); } void deleteStudent(Student** head, char name[]) { if (*head == NULL) { printf("学生信息为空\n"); return; } Student* temp = *head; Student* prev = NULL; while (temp != NULL) { if (strcmp(temp->name, name) == 0) { if (prev == NULL) { *head = temp->next; } else { prev->next = temp->next; } free(temp); printf("删除学生 %s 成功\n", name); return; } prev = temp; temp = temp->next; } printf("未找到学生 %s\n", name); } void printStudents(Student* head) { if (head == NULL) { printf("学生信息为空\n"); return; } printf("学生信息列表:\n"); Student* temp = head; while (temp != NULL) { printf("姓名:%s,年龄:%d\n", temp->name, temp->age); temp = temp->next; } } void destroyStudents(Student** head) { if (*head == NULL) { return; } Student* current = *head; Student* next; while (current != NULL) { next = current->next; free(current); current = next; } *head = NULL; printf("释放学生信息成功\n"); } int main() { Student* head = NULL; addStudent(&head, "张三", 20); addStudent(&head, "李四", 21); addStudent(&head, "王五", 22); printStudents(head); findStudent(head, "李四"); findStudent(head, "赵六"); deleteStudent(&head, "李四"); printStudents(head); destroyStudents(&head); return 0; } ``` 这个例子中,我们定义了一个`Student`结构体,包含学生的姓名和年龄,并且有一个指向下一个学生的指针。我们可以使用`createStudent`函数创建一个新的学生节点,然后用`addStudent`函数将学生添加到链表中。`findStudent`函数用于查找指定姓名的学生,`deleteStudent`函数用于删除指定姓名的学生,`printStudents`函数用于打印所有学生信息,`destroyStudents`函数用于释放链表内存。 希望这个示例能够帮助你开始实现学生信息管理系统!如果你有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值