⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xuyiyi.c

📁 学籍管理程序,有文本操作界面,界面与tc的界面类似.
💻 C
📖 第 1 页 / 共 5 页
字号:
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#include <bios.h>
#include <ctype.h>
#define    KEY_UP 72   /*方向健“↑”的键值*/
#define    KEY_DOWN 80    /*方向健“↓”的键值*/
#define    KEY_LEFT 75    /*方向键“←”的键值*/
#define    KEY_RIGTH 77    /*方向健“→”的键值*/
#define    KEY_ESC 27    /*ESC健的键值*/
#define    KEY_ALT_F 33    /*ALT+F的键值*/
#define    KEY_ALT_X 45    /*ALT+X的键值*/
#define    KEY_ENTER 13   /*回车键的键值*/
#define    KEY_ALT_M 50     /*ALT+M的键值*/
#define    KEY_ALT_A 30     /*ALT+A的键值*/
#define    KEY_ALT_C 46     /*ALT+CD的键值*/
#define    KEY_ALT_T 20     /*ALT+F的键值*/
#define    KEY_ALT_S 31     /*ALT+S的键值*/
#define    KEY_ALT_D 32     /*ALT+D的键值*/
#define ASK1(p) do{\
p=(classADDR*)malloc(sizeof(classADDR));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*宏定义获取班级结构空间*/
#define ASK2(p) do{\
p=(stuADDR*)malloc(sizeof(stuADDR));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*宏定义获取学生结构空间*/
#define ASK3(p) do{\
p=(courseADDR*)malloc(sizeof(courseADDR));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*宏定义获取课程结构空间*/
#define ASK4(p) do{\
p=(struct credit*)malloc(sizeof(struct credit));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*自定义获取学分信息结构*/
#define ASK5(p) do{\
p=(struct averagest*)malloc(sizeof(struct averagest));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*自定义学生加权分结构*/
#define ASK6(p) do{\
p=(struct totalcl*)malloc(sizeof(struct totalcl));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*自定义获取班级平均结构*/
#define ASK7(p) do{\
p=(struct averagecl*)malloc(sizeof(struct averagecl));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*自定义获取班级加权的函数*/

typedef  struct class_info{
    char NO[10];    /*班级编号*/
    char master[15];    /*辅导员姓名*/
    char major[20];     /*专业名称*/
    short num;           /*班级学生人数*/
    struct class_info *next;
}classADDR;                 /*班级结构*/
/*----------------------------班级结构-----------------------------*/

typedef struct student_info{
    char ID[15];    /*学号*/
    char name[15];    /*学生姓名*/
    char sex[3];    /*性别,男生为Me,女生为Wo*/
    int age;    /*年龄*/
    char NO[10];    /*班级编号*/
    char major[20];        /*专业*/
    char accommodiation[25];    /*宿舍*/
    char address[25];    /*家庭住址*/
    char burthday[9];    /*出生年月,格式如:86。06。26*/
    char inday[9];    /*入学年月*/
    char tel[23];    /*联系电话,如有两个,其间用\隔开*/
    float average;        /*加权分*/
    int index;            /*名次*/ 
    struct student_info *next;
}stuADDR;
/*--------------------------学生结构----------------------------*/

struct recourse{
    char term[15];        /*重修学期,如2005-2006-2代表2005到2006学年第二学期*/
    int re_score;    /*重修分数*/
    int re_times;    /*重修次数*/
    };
typedef struct course_info{
    char ID[15];
    char NO[10];
    char code[10];    /*课程编号*/
    char course_name[20];    /*课程名称*/
    char course_nature[10];    /*课程性质,必修require选修elective*/
    char course_type[10];    /*课程类型,基础课程bacsic专业课程common*/
    int test_score;    /*考试分数*/
    int daly_score;    /*平时成绩*/
    float total_score;    /*总成绩*/
    int credit;        /*学分*/
    int relearn;    /*重修情况,1重修0无重修*/
    struct recourse info;
    struct course_info*next;    
}courseADDR;                /*课程信息*/

/*----------------------------课程结构-----------------------------*/
struct credit{
    char id1[15];
    int t_credit;
    struct credit *next;
    };

struct averagest{
    char id1[15];
    char no[10];
    int t_credit;
    float total;
    float average;
    struct averagest *next;
    };
struct totalcl{
    char no[10];
    char code[10];
    float total;
    int a;
    struct totalcl *next;
    };
struct averagecl{
    char no[10];
    float average;
    int a;
    struct averagecl *next;
    };

/*--------------以上为用于统计计算时的辅助计算结构-------------*/

extern int count1=0;      /*全局计数变量*/
extern int count2=0;
extern int count3=0;
extern int savedtag1=1;    /*全局保存标志*/
extern int savedtag2=1;
extern int savedtag3=1;

void creatbasic(classADDR **);
void saveclass(classADDR**);
void displayclass(classADDR **);
void creatsecond(stuADDR **);
void savestu(stuADDR **);
void displaystu(stuADDR **);
void creatthird(courseADDR **);
void savecourse(courseADDR **);
void displaycourse (courseADDR **);
classADDR ** loadclass(void);
stuADDR **loadstu(void);
courseADDR **loadcourse(void);
void search_ID(stuADDR**);
void search_name(stuADDR**);
void search_age(stuADDR**);
void search_index(stuADDR**);
void sort_ID(stuADDR**);
void sort_up(stuADDR**);
void sort_down(stuADDR**);
void insertclass(classADDR**);
void insertclass(classADDR**);
void insertstu(stuADDR**);
void insertcourse(courseADDR**);
void deleteclass(classADDR**);
void deletestu(stuADDR**);
void deletecourse(courseADDR**);
void deletestuc(stuADDR**);
void deletecous(courseADDR**);
void deletecouc(courseADDR**);
void modifyclass(classADDR**);
void modifystu(stuADDR**);
void modifycourse(courseADDR**);
void total (courseADDR **);
void credit(courseADDR **);
void failstu (courseADDR **);
void averagestu (courseADDR **);
void classtotal(courseADDR **);
void classaverage (courseADDR **);
void link_fileclass (void);
void link_filestudent (void);
void link_filecourse (void);
 /*------------------------以上为学籍管理的函数说明---------------------------*/

int Get_KeyValue();
int Draw_MainMenu();
void alt_f (void);
void alt_d (void);
void alt_m (void);
void alt_a (void);
void alt_c (void);
void alt_s (void);
void alt_t (void);
void first (void);
void exitd();
void Box(int startx,int starty,int hight,int width);
char *menu[]={"File","Display","Modify","Add","Clear","Search","To_sort"};
char *red[]={"F","D","M","A","C","S","T"};
char *file[]={"Load ","New","Save ","Calculator","Quit ALT+X"};
char *modify[]={"Class ","Student","Course"};
char *add[]={"Class ","Student","Course"};
char *display[]={"Class ","Student","Course"};
char *clear[]={"Class ","Student","Course"};
char *search[]={"By name","By ID","By index","By age"};
char *to_sort[]={"By ID","Index up","Index down"};
char *red1[]={"L","N","S","C","Q"};
char *red2[]={"C","S","C"};
char *red3[]={"B","B","B","B"};
char *red4[]={"B","I","I"};
char *red5[]={"C","S","C","C","D","F"};
char *calculator[]={"Course Total","Student Average","Class Total","Class Average",
                    "Done Credit","Fail Student"};
char buf[17*13*2],buf1[16*2],buf2[40*13*2],buf3[80*25*2],buf4[30*2],buf5[17*13*2];
/*----------------------以上为菜单函数的说明------------------*/

int i,j,k,key,x,y,l,n,a;
struct class_info *head=NULL;
struct student_info *head1=NULL;
struct course_info *head2=NULL;

void main()
{
    first();
    clrscr();
    textbackground(1);
    clrscr();
    Draw_MainMenu();
    gettext(4,1,19,8,buf5);   /*画主菜单*/
    gotoxy(4,1);
    window(4,1,8,1);
    textbackground(0);
    textcolor(15);
    clrscr();
    cprintf("%s",menu[0]);
    while(1)
    {
        key=0;
        while(bioskey(1)==0);    /*循环等待,直到有键按下为止 */
        key=Get_KeyValue();    /*获取键值*/ 
        if(key==KEY_ALT_X)    /*若按的是Alt+X,退出程序*/
         {
            exitd();
            exit(0);
         }
        if(key==KEY_RIGTH||key==KEY_LEFT)          /*响应左右键*/
        {
            i=0,j=6,x=4;
            gotoxy(4,1);
            window(4,1,8,1);
            textbackground(15);
            textcolor(0);
            clrscr();
            cprintf("%s",menu[0]);

            while(key!=KEY_ALT_X&&key!=KEY_ENTER&&key!=KEY_DOWN)
            {

                l=strlen(menu[i]);
                if(i==6)n=strlen(menu[0]);
                else n=strlen(menu[i+1]);
                if(i==0)j=strlen(menu[6]);
                else j=strlen(menu[i-1]);

                if(key==KEY_RIGTH)           /*响应子向右*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -