LINUX下的C学生信息管理系统

第一次写,难免会有些紧张 ,这是我们的课程设计作业,拉出来分享下。 -_- 大一的代码看起来真特么丑

/* 
    版本号 V1.0
    时间 2014.6.24*/

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define SI sizeof(stu)
#define PT "^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^ ^…^\n"
#define ET "|%-15s|%-14ld|%-9s|%-8d|%-8d|%-14ld|%-6.1f|%-6.1f|%-6.1f|%-6.1f|%6.1f|%6.1f|%6.1f|\n绩点:                                                         |%-6.1f|%-6.1f|%-6.1f|%-6.1f|%-6.1f|\n",node->name,node->num,node->sex,node->age,node->bir,node->tel,node->score[0],node->score[1],node->score[2],node->score[3],node->score[4],node->sum,node->ave,node->gpa[0],node->gpa[1],node->gpa[2],node->gpa[3],node->gpa[4]

void clear(void)    //清屏函数
{
    system("clear");
}
typedef struct s
{
    long num;    //学号
    char name[20];    //姓名
    char sex[5];    //性别
    int age;    //年龄
    int bir;        //生日
        long tel;        //电话号码
    float score[5];    //五门成绩
    float ave;    //平均分
    float gpa[5];    //绩点
    float sum;    //总分数
    char pass[15];
    struct s * next;

}stu;

typedef struct passw
{
    long num;
    char pass[15];
    struct passw *next;
}DI;

stu * creat()        //创建链表
{
    stu* head,*node,*new_node;
    FILE *fp;
        fp=fopen("os.txt","w+");
        if((fp==NULL))
        {
                printf("加载失败!\n");
                exit(0);
        }

    head = node = (stu *)malloc(SI);
    new_node = (stu *)malloc(SI);
    printf("\n|学生姓名  |学号  |姓别 |年龄 |生日 |电话号码   |高数 |英语 |离散 |大物 |C语言:\n");
        scanf("%s %ld %s %d %d %ld %f %f %f %f %f",new_node->name,&new_node->num,new_node->sex,&new_node->age,&new_node->bir,&new_node->tel,&new_node->score[0],&new_node->score[1],&new_node->score[2],&new_node->score[3],&new_node->score[4]);
    int i;
        float sum=0;
        for (i=0;i<5;i++)
        {     
                sum+=new_node->score[i];
                if (new_node->score[i]<60)
                       new_node->gpa[i] = 0; 
                else
                       new_node->gpa[i] = new_node->score[i]/10-5;
                
        }
        new_node->ave = sum/5;
    new_node->sum = sum;
while (new_node->num!=0)
{
    node->next = new_node;
    node = new_node;
    new_node = (stu *)malloc(SI);
    printf("\n|学生姓名  |学号  |姓别 |年龄 |生日 |电话号码   |高数 |英语 |离散 |大物 |C语言:\n");
        scanf("%s %ld %s %d %d %ld %f %f %f %f %f",new_node->name,&new_node->num,new_node->sex,&new_node->age,&new_node->bir,&new_node->tel,&new_node->score[0],&new_node->score[1],&new_node->score[2],&new_node->score[3],&new_node->score[4]);
        int i;
        float sum=0;
        for (i=0;i<5;i++)
        {
                sum+=new_node->score[i];
                if (new_node->score[i]<60)
                       new_node->gpa[i] = 0;
                
                else
                       new_node->gpa[i] = new_node->score[i]/10-5;
                
        }
        new_node->ave = sum/5;
    new_node->sum = sum;
}
node->next = NULL;
free(new_node);
fclose(fp);
return head;
}

void write(stu *head)
{
    stu *new_node;
    new_node = head->next;
    FILE *fp;
    if((fp = fopen("os.txt","w+"))==NULL)
    {
        printf("加载失败!\n");
        exit(0);
    }
while(new_node!=NULL)
{    
    fprintf(fp,"%-15s%-14ld%-9s%-8d%-8d%-14ld%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-4.1f%-4.1f%-4.1f%-4.1f%-4.1f\n",new_node->name,new_node->num,new_node->sex,new_node->age,new_node->bir,new_node->tel,new_node->score[0],new_node->score[1],new_node->score[2],new_node->score[3],new_node->score[4],new_node->sum,new_node->ave,new_node->gpa[0],new_node->gpa[1],new_node->gpa[2],new_node->gpa[3],new_node->gpa[4]);
    new_node = new_node->next;

}
    fclose(fp);
}

stu *read(void)        //从文件中读取信息并创建链表
{
     stu* head,*node,*new_node;
    FILE *fp;
        fp=fopen("os.txt","r");
        if((fp==NULL))
        {
                printf("加载失败!\n");
                exit(0);
        }
    head = node = (stu *)malloc(SI);
        new_node = (stu *)malloc(SI);
    fscanf(fp,"%s %ld %s %d %d %ld %f %f %f %f %f %f %f %f %f %f %f %f",new_node->name,&new_node->num,new_node->sex,&new_node->age,&new_node->bir,&new_node->tel,&new_node->score[0],&new_node->score[1],&new_node->score[2],&new_node->score[3],&new_node->score[4],&new_node->sum,&new_node->ave,&new_node->gpa[0],&new_node->gpa[1],&new_node->gpa[2],&new_node->gpa[3],&new_node->gpa[4]);
    while(!feof(fp))
    {
        node->next = new_node;
        node = new_node;
        new_node = (stu *)malloc(SI);
         fscanf(fp,"\n%s %ld %s %d %d %ld %f %f %f %f %f %f %f %f %f %f %f %f",new_node->name,&new_node->num,new_node->sex,&new_node->age,&new_node->bir,&new_node->tel,&new_node->score[0],&new_node->score[1],&new_node->score[2],&new_node->score[3],&new_node->score[4],&new_node->sum,&new_node->ave,&new_node->gpa[0],&new_node->gpa[1],&new_node->gpa[2],&new_node->gpa[3],&new_node->gpa[4]);
    }
    node->next = NULL;
    free(new_node);
    fclose(fp);
    return(head);
}

stu *findnum(void)   //其中num为要查找的学生的学号
{
    long num;
    printf("查找的学号:");
    scanf("%ld",&num);
    stu *node;
    node = read();
    while (node->next!=NULL)
    {    
        node = node->next;
        if (node->num == num)
        {       printf(PT);
                        printf(ET);
            return node;
                }

    }
    printf("学生信息未找到!\n");
    return NULL;
    
}

stu *findname(void)   //其中num为要查找的学生的姓名
{
    char name[20];
    printf("查找的姓名:");
    scanf("%s",name);
        stu *node;
        node = read();
    int cmp;
        while (node->next!=NULL)
        {
        node = node->next;
                cmp = strcmp(name,node->name);
        if(cmp == 0)
        {    printf(PT);
                        printf(ET);
            return node;
        }
        }
        printf("学生信息未找到!\n"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值