C语言学生信息管理系统 (单链表版)【无图,未调试】

//以顺序表作为存储结构,设计和实现课程成绩管理的完整程序。程序包括如下功能。
//1.建立学生成绩表,包含学生的学号、姓名和成绩。
//2.可以显示所有学生成绩。
//3.可以计算学生的总数。
//4.可以按学号和序号查找学生。
//5.可以在指定位置插入学生成绩数据。
//6.可以删除指定位置的学生数据。
//7.可以把学生成绩按从高到低的顺序排序。

//作者: yinlinqvan
//操作系统:Mac OS X
//编译器:gcc

#include "string.h"
#include "sys/malloc.h"
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
#include "sys/types.h"
#define MAXSIZE 100

typedef struct Student
{
    char sname[9];
    char sno[5];
    int score;
}DataType;

typedef struct
{
    DataType data[MAXSIZE];
    int last;
}SeqList;
//全民目击
DataType *inputdata(void);
SeqList *initSeq(void);
void display(SeqList * L, int i);
void displayAll(SeqList * L);
int lengthList(SeqList * L);
void locateElemByplace(SeqList *L, int i);
void locateElem(SeqList *L, char ch[5]);
int insertElem(SeqList *L, int i);
int deleteElem(SeqList *L, int i);
void insertSort(SeqList * L);
int menue();

int main(int argc,char *argv[])
{
    SeqList * L;
    char sno[5] = {'\0'};
    char sname[9] = {'\0'};
    int b = 1;
    int i = 0;
	int t = 0;
    while (b) {
        switch(menue())
		{
            case 1:
                L = initSeq();
                break;
            case 2:
                printf("\t◎输入插入哪个位置前:");
                scanf("%d", &i);
				insertElem(L, i);
                break;
            case 3:
                printf("\t◎输入待删除学生的序号:");
                scanf("%d", &i);
				deleteElem(L, i);
                break;
            case 4:
                printf("╭═══════════════════════════════╮\n");
                printf("║\t学生总数为:%d\t\t║\n", lengthList(L));
                printf("╰═══════════════════════════════╯\n\n");
                break;
            case 5:
                printf("\t◎输入待查找学生的学号:");
                scanf("%s", sno);
                locateElem(L, sno);
                break;
            case 6:
                printf("\t◎输入待查学生的位置:");
                scanf("%d", &i);
                locateElemByplace(L, i);
                break;
            case 7:
                displayAll(L);
                break;
            case 8:
                insertSort(L);
                break;
            case 9:
                i = 2;
                while (i)
                {
                    system("clear");
                    printf("\033[5m");
                    printf("\033[?25l");        //隐藏光标
                    printf("\n\n\n\n\n\n");
                    printf("╭═══════════════════════════════╮\n");
                    printf("║\t正在退出(%d秒)\t\t║\n", i--);
                    printf("╰═══════════════════════════════╯\n");
                    
                    sleep(1);
                }
                printf("\033[0m");
                system("clear");
                return 0;
                break;
            default:
                i = 2;
                while (i)
                {
                    system("clear");
                    printf("╭═══════════════════════════════╮\n");
                    printf("║操作数无效,正在返回主菜单(%d秒)║\n", i--);
                    printf("╰═══════════════════════════════╯\n");
                    sleep(1);
                }
                continue;
		}
        getchar();
        printf("PRESS ENTER TO CONTINUE!");
        while (1) {
            if ('\n' == getchar())
            {
                break;
            }
        }
	}
    return 0;
}

DataType *inputdata(void)
{
    DataType s1;
    DataType *s = &s1;
    char sno[5] = {'\0'};
    char sname[9] = {'\0'};
    int  score = 0;
    
    printf("\tsno\t->");
    scanf("%s",sno);
    if (sno[0] == '#') {
        return NULL;
    }
    strcpy(s->sno, sno);
    printf("\tsname\t->");
    scanf("%s",s->sname);
    
    printf("\tscore\t->");
    scanf("%d", &s->score);
    
    puts("");
    return s;
}

SeqList *initSeq(void)
{
    DataType * s;
    
    SeqList L1;
    SeqList * L = &L1;
    L->last = -1;
    
    printf("╭═══════════════════════════════════════════════╮\n");
    printf("║请输入学生信息(当学号为\"#\"时结束)          ║\n");
    printf("║                                               ║\n");
    printf("║学号sno     (不超过4位)                      ║\n");
    printf("║姓名sname   (不超过4个汉字)                  ║\n");
    printf("║成绩score   (int型)                          ║\n");
    printf("╰═══════════════════════════════════════════════╯\n\n");
    
    while (1) {
        s = inputdata();
        if (!s)
		{
            break;
        }
        L->last = L->last + 1;
        L->data[L->last] = *s;
    }
	displayAll(L);
    return L;
}

void display(SeqList * L, int i)
{
    printf("╭═══════════════════════════════════════════════╮\n");
    printf("║\tsno\t\tsname\t\tscore\t║\n");
    printf("║\t%s\t\t%s\t\t%-4d\t║\n", L -> data[i].sno, L -> data[i].sname, L -> data[i].score);
    printf("╰═══════════════════════════════════════════════╯\n\n");
}

void displayAll(SeqList * L)
{
	printf("%d-----\n", L->last);
    int i = 0;
    printf("╭═══════════════════════════════════════════════╮\n");
    printf("║\tsno\t\tsname\t\tscore\t║\n");
	for(i = 0; i <= L->last; i++)
	{
        printf("║\t%s\t\t%s\t\t%-4d\t║\n", L->data[i].sno, L->data[i].sname, L->data[i].score);
    }
    printf("╰═══════════════════════════════════════════════╯\n\n");
}

int lengthList(SeqList * L)
{
    return L -> last + 1;
}

void locateElemByplace(SeqList *L, int i)
{
    display(L, i-1);
}

void locateElem(SeqList *L, char ch[5])
{
    int i = 0;
    for (i = 0; i < L -> last; i ++) {
        if (0 == strcmp(L -> data[i].sno, ch)) {
            display(L, i);
            break;
        }
    }
}

int insertElem(SeqList *L, int i)
{
    int j, k;
    DataType * s;
    k = L->last;
    if (L->last == MAXSIZE - 1)
    {
        printf("╭═══════════════════════════════╮\n");
        printf("║\tOverflow\t║\n");
        printf("╰═══════════════════════════════╯\n\n");    
        return 0;
    }
    if ((i < 1)||(i > L -> last + 2))
    {
        printf("╭═══════════════════════════════╮\n");
        printf("║\tThe insert place is error\t║\n");
        printf("╰═══════════════════════════════╯\n\n");
        
        return 0;
    }
    for (j = k; j >= i - 1; j --)
	{
        L -> data[j + 1] = L -> data[j];
    }
    s =inputdata();
    L -> last = L ->last + 1;
    L -> data[i - 1] = *s;
    return 1;
}

int deleteElem(SeqList *L, int i)
{
    int j;
    if (i < 1 || i > L -> last + 1)
    {
        printf("╭═══════════════════════════════╮\n");
        printf("║\t不存在第%d个元素\t║\n",i);
        printf("╰═══════════════════════════════╯\n\n");
        return 0;
    }
    for (j = i; j <= L -> last; j ++) {
        L -> last = L ->last - 1;
    }
    return 1;
}

void insertSort(SeqList * L)
{
    SeqList *L1 = (SeqList *)malloc(sizeof(SeqList));
    DataType temp;
    int i = 0;
    int j = 0;
    int len = L->last;
    
    for (i = 0; i <= len; i ++)
    {
        L1->data[i] = L->data[i];
    }
    L1->last = L->last;
    
    for (i = 1; i <= len; i ++)
	{
        if (L1->data[i].score > L1->data[i-1].score)
        {
            temp.score = L1->data[i].score;
            strcpy(temp.sno,   L1->data[i].sno);
            strcpy(temp.sname, L1->data[i].sname);
            L1->data[i] = L1->data[i -1];
			for (j = i-2; (temp.score > L1->data[j].score)&&(j >= 0); j--)
			{
				L1->data[j+1] = L1->data[j];
			}
			L1->data[j+1].score = temp.score;
			strcpy(L1->data[j+1].sno, temp.sno);
			strcpy(L1->data[j+1].sname, temp.sname);
		}
	}
    displayAll(L1);
}

int menue()
{
    system("clear");
    //警告音
    printf("\033[0m");              //关闭所有属性
    
    printf("\033[44;37m");          //47是字背景颜色,33是字体的颜色
    printf ("\033[5m");             //闪烁
    printf("\n^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^\n\n");
    printf("\033[0m");              //关闭所有属性
    
    printf("\033[44;37m");
    printf("╭═══════════════════════════════╮\n");
    printf("║学生成绩管理程序               ║\n");
    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("╰═══════════════════════════════╯\n\n");
    
    printf ("\033[5m");
    printf("^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^\n\n");
    printf("\033[0m");              //关闭所有属性
    
    time_t rawtime;
    struct tm * timeinfo;
    time ( &rawtime );
    timeinfo = localtime ( &rawtime );
    //printf ( "\t\007%s", asctime (timeinfo) );
    
    printf ("\033[;34m");
    printf ("\t[%4d-%02d-%02d %02d:%02d:%02d]\n",
            1900+timeinfo->tm_year,
            1+timeinfo->tm_mon,
            timeinfo->tm_mday,
            timeinfo->tm_hour,
            timeinfo->tm_min,
            timeinfo->tm_sec);
    
    char colorname[3][20] = {{"RED"}, {"BLUE"}, {"YELLLOW"}};
    srand(time(&rawtime));  //时间触发
    //textcolor(colorname[rand()%3]);
    //printf("\t[textcolor is %s]\n", colorname[rand()%3]);
    //颜色码和控制码 我的参考链接 http://wenku.baidu.com/view/a38f77ff910ef12d2af9e70b.html
    
    printf("\t◎输入功能项:");
    int a = 0;
    scanf("%d",&a);
    printf("\033[0m");
    
    system("clear");
    return a;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值