简单成绩管理系统

             终于完成了,只用了结构体和指针,没有用到文件操作。还是很让自己欣慰得额。。。
           由于以前没有写过包含几个c源文件得程序,其中在定义头文件还卡壳了,查了一些例子,发觉main()也和其他函数用法差不多,只不过是最外层的嵌套函数罢了。
//main.c

         #include"func.h"
#include
#include
int main (int argc, char const* argv[]) {
    int n;
    pstu p=NULL,tmp=NULL;
    char choice;
    char buf[20];
    printmenu();
    for(;;)
    {
    scanf("%c",&choice);
    switch (choice)
    {
        case 'q':
            return 0;
        case '0':
            printmenu();
            break;
        case '1':
            printf("请输入学生的个数:n");
            scanf("%d",&n);
            p=input(n);
            break;
        case '2':
            printf("请输入姓名:n");
            scanf("%s",buf);
            tmp=searchbyname(buf,n,p);
            output(tmp);
            break;
        case '3':
            printf("请输入学号:n");
            scanf("%s",buf);
            tmp=searchbynumber(buf,n,p);
            output(tmp);
            break;
        case '4':
            sortbynumber(n,p);
            break;
        case '5':
            sortbygrades(n,p);
            break;
        default:
            puts("请选择!(0返回主菜单菜单,q结束)n");
            break;
    }
    }
    free(p);
    p=NULL;
}

//func.c
#include"func.h"
#include
#include
#include
pstu input(int n)
{
    int i=0;
    pstu p=(pstu)malloc(n*sizeof(stu));
    pstu tmp=p;
    while(n--)
    {
        printf("请输入第%d个学生的信息(姓名,学号,分数) 空格隔开!n",++i);
        scanf("%s%s%d",p->name,p->num,&p->math);
        p++;
    }
    return tmp;
}
void output(stu *mem)
{
    puts("=======================================n");
    puts("姓名           学号          数学成绩n");
    printf("%-10s    %-10s    %-10dn",mem->name,mem->num,mem->math);
    puts("=======================================n");
}
pstu searchbyname(char *str,int n,pstu start)
{
    int i;
    pstu tmp=start;
    for(i=0;i        if(!strncmp(str,start++->name,20))
                return start-1;
    printf("error!name did not exist!n");
        return tmp;
}
pstu searchbynumber(char *str,int n,pstu start)
{
    int i;
    pstu tmp=start;
    for(i=0;i        if(!strncmp(start++->num,str,10))
                return start-1;
    printf("error!number did not exist!n");
    return tmp;
}
void sortbygrades(int n,pstu p)
{
    int i,j,k,tmp=0,mark[20];
    memset(mark,0,sizeof(mark));
    puts("=======================================n");
    puts("姓名           学号          数学成绩n");
    for(k=0;k    {
        tmp=0;
        for(i=0;i            if((p+i)->math>tmp&&mark[i]==0)
            {
                 tmp=(p+i)->math;
                 j=i;
            }
        mark[j]=1;
        printf("%-10s    %-10s    %-10dn",(p+j)->name,(p+j)->num,(p+j)->math);
    }
    puts("=======================================n");
}
void sortbynumber(int n,pstu p)
{
    int i,j,k,mark[20];
    char buf[10];
    memset(mark,0,sizeof(mark));
    puts("=======================================n");
    puts("姓名           学号          数学成绩n");
    for(k=0;k    {
        memset(buf,'9',sizeof(buf));
        for(i=0;i            if(strncmp((p+i)->num,buf,10)<0&&mark[i]==0)
            {
                strcpy(buf,(p+i)->num);
                j=i;
            }
        mark[j]=1;
        printf("%-10s    %-10s    %-10dn",(p+j)->name,(p+j)->num,(p+j)->math);
    }
    puts("=======================================n");
}
void printmenu()
{
    puts("=======================================n");
    puts("tt欢迎进入学生成绩管理系统!n");
    puts("请选择菜单:n");
    puts("t1.输入学生信息n");
    puts("t2.按姓名查找n");
    puts("t3.按学号查找n");
    puts("t4.按学号排序n");
    puts("t5.按成绩排序n");
    puts("t0.返回本菜单n");
    puts("tq.退出n");
    puts("=======================================n");
}

//func.h
#ifndef FUNC_H
#define FUNC_H
typedef struct stu{
    char name[20];
    char num[10];
    int math;

}*pstu,stu;
pstu input();
void output(stu *mem);
pstu searchbyname(char *s,int n,pstu start);
pstu searchbynumber(char *s,int n,pstu start);
void sortbynumber(int n,pstu p);
void sortbygrades(int n,pstu p);
void printmenu();
#endif



            
        
</div>