注册 登录
编程论坛 C++教室

分享原创:一个简单的学生信息管理系统(请大家提提意见)

南国利剑 发布于 2010-06-07 16:46, 1980 次点击
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define NULL 0

struct student{
    char name[20];
    char id[20];
    char sex[3];
    int year,month;
    char major[50];
    char ban_ji[50];
    char address[50];
    char phone_num[20];

};

int main(int argc, char* argv[])
{
    FILE* fp;
    fp=fopen("学生成绩管理系统.txt","ab+");
    if(fp==NULL){
        printf("打开文件失败!\n");
        exit(1);
    }
    while(1){
    printf("*******************欢迎使用学生成绩管理系统!**********************\n");
    printf("1.录入学生信息\n");
    printf("2.显示学生信息\n");
    printf("3.查找学生\n");
    printf("4.退出\n");
    printf("********************************************************************\n");
    printf("请选择要操作的项目:");
    int i;
    scanf("%d",&i);
    switch(i){
    case 1:
        {
        struct student *p=(student*)malloc(sizeof(struct student));
        if(p==NULL){
            printf("申请内存失败!\n");
            exit(1);
        }
        printf("请输入学生姓名:");
        scanf("%s",p->name);

        printf("请输入学生学号:");
        scanf("%s",p->id);

        printf("请输入学生性别:");
        scanf("%s",p->sex);

        printf("请输入学生出生年份:");
        scanf("%d",&p->year);

        printf("请输入学生出生月份:");
        scanf("%d",&p->month);

        printf("请输入学生的专业:");
        scanf("%s",p->major);

        printf("请输入学生所在的班级:");
        scanf("%s",p->ban_ji);

        printf("请输入学生的家庭住址:");
        scanf("%s",p->address);

        printf("请输入学生的宿舍电话:");
        scanf("%s",p->phone_num);

        fwrite(p,sizeof(struct student),1,fp);

        free(p);
        p=NULL;
        }
        system("pause");
        system("cls");
        break;
    case 2:
        {
            struct student* p=(student*)malloc(sizeof(struct student));
            if(p==NULL){
                printf("申请内存失败!\n");
                exit(1);
            }
            rewind(fp);
            while(!feof(fp)){
                if(fread(p,sizeof(struct student),1,fp))
                    printf("姓名:%s\n学号:%s\n性别:%s\n出生年月:%d %d\n专业:%s\n所在班级:%s\n家庭住址:%s\n宿舍电话:%s\n\n",
                            p->name,p->id,p->sex,p->year,p->month,p->major,p->ban_ji,p->address,p->phone_num);
            }
            free(p);
            p=NULL;
        }
        system("pause");
        system("cls");
        break;
    case 3:
        rewind(fp);
        printf("1.按姓名查找\n2.按学号查找\n");
        int j;
        scanf("%d",&j);
        switch(j){
        case 1:
            {
                char names[20];
                int n=0;
                printf("请输入要查找的学生的姓名:");
                scanf("%s",names);
                struct student* p=(student*)malloc(sizeof(struct student));
                if(p==NULL){
                    printf("申请内存失败!\n");
                    exit(1);
                }
                while(!feof(fp)){
                    if(fread(p,sizeof(struct student),1,fp))
                        if(strcmp(p->name,names)==0){
                            n++;
                            printf("姓名:%s\n学号:%s\n性别:%s\n出生年月:%d %d\n专业:%s\n所在班级:%s\n家庭住址:%s\n宿舍电话:%s\n\n",
                                    p->name,p->id,p->sex,p->year,p->month,p->major,p->ban_ji,p->address,p->phone_num);
                        }
                }
                if(!n)    printf("没有对应的信息!\n");               
            }
            break;
        case 2:
            {
                char number[20];
                int n=0;
                printf("请输入要查找的学生的学号:");
                scanf("%s",number);
                struct student* p=(student*)malloc(sizeof(struct student));
                if(p==NULL){
                    printf("申请内存失败!\n");
                    exit(1);
                }
                while(!feof(fp)){
                    if(fread(p,sizeof(struct student),1,fp))
                        if(strcmp(p->id,number)==0){
                            n++;
                            printf("姓名:%s\n学号:%s\n性别:%s\n出生年月:%d %d\n专业:%s\n所在班级:%s\n家庭住址:%s\n宿舍电话:%s\n\n",
                                    p->name,p->id,p->sex,p->year,p->month,p->major,p->ban_ji,p->address,p->phone_num);
                        }
                }
                if(!n)    printf("没有对应的信息!\n");   


            }
            break;
        default:printf("您的输入无效!\n");
        }
        system("pause");
        system("cls");
        break;
    case 4:exit(0);
        break;
    default:printf("您的输入无效!\n");

    }



    }
    fclose(fp);

    return 0;
}


[ 本帖最后由 南国利剑 于 2010-6-7 19:33 编辑 ]
16 回复
#2
zdoublehang2010-06-07 19:40
好啊!!!!!!!!!!!!!!!!
#3
Devil_W2010-06-07 19:59
太一般了。

完全没有面向对象的思想。

怎么还能置顶?
#4
迷失的木桶2010-06-07 20:25
纯C实现,很不错~。楼主再写个C++版的
#5
南国利剑2010-06-07 22:39
回复 3楼 Devil_W
谢谢!
说的对。
我是帮一个朋友写的。
他要求用纯C写。
呵呵。。。
#6
南国利剑2010-06-07 23:02
回复 4楼 迷失的木桶
好的,我前段时间也写了个类似的。一会贴出来。
#7
Devil_W2010-06-07 23:35
以下是引用南国利剑在2010-6-7 23:02:18的发言:

好的,我前段时间也写了个类似的。一会贴出来。


很好,很想见识你的C++是什么水平的。

看看你怎么设计类, 用到了C++的哪些技巧。
#8
迷失的木桶2010-06-08 08:52
呵呵,其实用C实现就可以了,如果改成C++我觉得实现成本升高,并且没有多大变化。当然作为练手还是不错的。
#9
yi198606992010-06-08 16:24
性别 我输入123  结果没报错····
#10
yi198606992010-06-08 16:26
#define NULL 0
 请问大侠  这个用法和意义
#11
南国利剑2010-06-09 16:48
回复 10楼 yi19860699
这个就是一个宏定义啊.
就是下面部分所出现的NULL都用0替代了.就这个功能.
#12
华仔li2010-06-10 00:08
还行  呵呵
#13
smart_abell2010-06-24 17:00
回复 10楼 yi19860699
null就是0。
例如#define N 3(表示N就是3,当用到3时用N代替)
#14
smart_abell2010-06-24 17:01
功能不是太多,要是多点的话就够我交c语言的大作业的了
#15
admin我2010-06-30 10:36
很好。! 我喜欢
#16
qiuchenbin2010-07-01 12:22
能不面向windows界面的来个,纯控制台程序看以来不爽
#17
ldm664881422010-07-02 11:13
请问用C++运行时为何报错?
1