学了一学期的C语言,要做大作业。 求一个500行C语言程序代码。 可以在VC++6.0上运行的。

学了一学期的C语言,要做大作业。 求一个500行C语言程序代码。 可以在VC++6.0上运行的。,第1张

//户籍管理系统, 应该能满足你的要求。

//多给点财富吧

#include<stdio.h>

#include<stdlib.h>

typedef struct tagHuJiXinXi

{

char shfzhh[64]//身份z号

char xm[16]//姓名

char xb[8]//性别

int nl//年龄

char xl[64]//学历

char zhzh[64]//住址

char dh[32]//电话

}HuJiXinXi,*PtHuJiXinXi

void readfromfile()

void writetofile()

void tuichu()

void add()

void outputone()

void outputall()

void sortbyage()

void myrealloc()

void findbyagerange()

void del()

void alter()

void find()

void showmenu()

void processmenu(int m)

PtHuJiXinXi pt

int count=0,capacity=16

int main()

{

int m

pt=(PtHuJiXinXi)calloc(capacity,sizeof(HuJiXinXi))

readfromfile()

while(1)

{

showmenu()

scanf("%d",&m)

processmenu(m)

}

system("PAUSE")

return EXIT_SUCCESS

}

void processmenu(int m)

{

switch(m)

{

case 0:

tuichu()

break

case 1:

add()

break

case 2:

del()

break

case 3:

alter()

break

case 4:

outputall()

break

case 5:

sortbyage()

break

case 6:

findbyagerange()

break

case 7:

writetofile()

break

case 8:

find()

break

default:

printf("不可识别的命令。\n")

}

}

//数铅段实现存储空间的自动扩充

void myrealloc()

{

if(count+1>=capacity)

{

int i

capacity*=2

PtHuJiXinXi temppt=(PtHuJiXinXi)calloc(capacity,sizeof(HuJiXinXi))

for(i=0i<counti++)

{

temppt[i]=pt[i]

}

free(pt)

pt=temppt

}

}

void readfromfile()

{

char f[128]

FILE *inf

HuJiXinXi hjxx

printf("请输入包含户籍信薯誉息的文件的文件名,如果还没有文件,请输入omit(文激昌件中每行一条户籍信息,")

printf("格式:身份z号 姓名 性别 年龄 学历 住址 电话)...\n")

gets(f)

if(!strcmp(f,"omit"))

{

return

}

inf=fopen(f,"r")

if(NULL!=inf)

{

do

{

fscanf(inf,"%s %s %s %d %s %s %s",hjxx.shfzhh,hjxx.xm,hjxx.xb,&hjxx.nl,hjxx.xl,hjxx.zhzh,hjxx.dh)

myrealloc()

pt[count++]=hjxx

}while(!feof(inf))

fclose(inf)

printf("信息已成功加载。\n")

}

else

{

printf("文件名无效或文件无数据。\n")

}

}

void writetofile()

{

char f[128]={'\0'}

FILE *outf

int i

printf("请输入保存户籍信息的文件的文件名:\n")

scanf("%s",f)

outf=fopen(f,"w")

if(NULL!=outf)

{

for(i=0i<counti++)

{

fprintf(outf,"%s %s %s %d %s %s %s",pt[i].shfzhh,pt[i].xm,pt[i].xb,pt[i].nl,pt[i].xl,pt[i].zhzh,pt[i].dh)

if(count-1!=i)

{

fprintf(outf,"%s","\n")

}

}

fclose(outf)

printf("文件保存成功。\n")

}

else

{

printf("文件名无效。\n")

}

}

void showmenu()

{

char menu[]="菜单:\n0、退出\n1、添加一条信息\n2、删除一条信息\n3、批量修改\n4、浏览全部信息\n5、按年龄排序 \n6、按年龄区间查询\n7、保存到文件\n8、随意查询\n请选择一个菜单:"

puts(menu)

}

void tuichu()

{

if(NULL==pt)

{

free(pt)

}

exit(0)

}

//判断身份z号是否重复

int isshfzhhchf(char s[64])

{

int i,r=0

for(i=0i<counti++)

{

if(!strcmp(pt[i].shfzhh,s))

{

r=1

break

}

}

return r

}

void add()

{

myrealloc()

printf("添加一条户籍信息。\n")

printf("请输入身份z号 姓名 性别 年龄 学历 住址 电话:\n")

scanf("%s %s %s %d %s %s %s",pt[count].shfzhh,pt[count].xm,pt[count].xb,&pt[count].nl,

pt[count].xl,pt[count].zhzh,pt[count].dh)

if(!isshfzhhchf(pt[count].shfzhh))

{

count++

printf("添加成功。\n")

}

else

{

printf("身份z号重复,添加失败。\n")

}

}

//输出下标为n的一条户籍信息

void outputone(int n)

{

if(n>=0 &&n<count)

{

printf("第%d条户籍信息:\n",n+1)

printf("%s %s %s %d %s %s %s。\n",pt[n].shfzhh,pt[n].xm,pt[n].xb,pt[n].nl,pt[n].xl,pt[n].zhzh,pt[n].dh)

}

else

{

printf("没有第%d条户籍信息存在。\n",n+1)

}

}

void outputall()

{

if(0==count)

{

printf("系统已空。\n")

}

else

{

int i

for(i=0i<counti++)

{

outputone(i)

}

}

}

void sortbyage()

{

int i,j,px

HuJiXinXi hjxx

printf("子菜单:\n1、升序\n2、降序\n请选择:")

scanf("%d",&px)

if(1==px || 2==px)

{

for(i=0i<count-1i++)

{

for(j=0j<count-i-1j++)

{

if(1==px)

{

if(pt[j].nl>pt[j+1].nl)

{

hjxx=pt[j+1]

pt[j+1]=pt[j]

pt[j]=hjxx

}

}

else

{

if(pt[j].nl<pt[j+1].nl)

{

hjxx=pt[j+1]

pt[j+1]=pt[j]

pt[j]=hjxx

}

}

}

}

printf("排序完成。\n")

}

else

{

printf("无法处理的子菜单命令。\n")

}

}

void findbyagerange()

{

int i,min,max,c=0

printf("请输入要查找的户籍信息的最小年龄和最大年龄:")

scanf("%d %d",&min,&max)

printf("查询结果如下:\n")

for(i=0i<counti++)

{

if(pt[i].nl>=min &&pt[i].nl<=max)

{

outputone(i)

printf("符合你的要求。\n")

c++

}

}

if(0==c)

{

printf("没有符合你的要求的户籍信息。\n")

}

}

//删除一条户籍信息

void del()

{

int i,n

HuJiXinXi hjxx

printf("请输入要删除的是第几条户籍信息:")

scanf("%d",&n)

if(n-1>=0 &&n-1<count)

{

hjxx=pt[n-1]

for(i=ni<counti++)

{

pt[i-1]=pt[i]

}

printf("删除成功。\n第%d条户籍信息:\n",n)

printf("%s %s %s %d %s %s %s。",hjxx.shfzhh,hjxx.xm,hjxx.xb,hjxx.nl,hjxx.xl,hjxx.zhzh,hjxx.dh)

printf(",已删除。\n")

count--

}

else

{

printf("删除失败。\n不存在第%d条户籍信息。\n",n)

}

}

//根据hjxx的值修改下标为n的户籍信息

//对于pt[n]的对应字段,如果在hjxx中是用*表示的,则不修改

void change(HuJiXinXi hjxx,int n)

{

//返回非0值,意味着hjxx.shfzhh(身份z号)不等于*,即需要修改pt[n].shfzhh字段,以下都类似

if(strcmp(hjxx.shfzhh,"*"))

{

strcpy(pt[n].shfzhh,hjxx.shfzhh)

}

if(strcmp(hjxx.xm,"*"))

{

strcpy(pt[n].xm,hjxx.xm)

}

if(strcmp(hjxx.xb,"*"))

{

strcpy(pt[n].xb,hjxx.xb)

}

//不等于-1表示需要修改pt[n].nl(年龄)

if(-1!=hjxx.nl)

{

pt[n].nl=hjxx.nl

}

if(strcmp(hjxx.xl,"*"))

{

strcpy(pt[n].xl,hjxx.xl)

}

if(strcmp(hjxx.zhzh,"*"))

{

strcpy(pt[n].zhzh,hjxx.zhzh)

}

if(strcmp(hjxx.dh,"*"))

{

strcpy(pt[n].dh,hjxx.dh)

}

}

//对户籍信息进行批量修改

void alter()

{

int n

HuJiXinXi hjxx

char nl[16]

while(1)

{

printf("请输入要修改第几条户籍信息(-1退出循环):")

scanf("%d",&n)

if(-1==n)

{

break

}

else if(n-1>=0 &&n-1<count)

{

printf("修改...\n")

outputone(n-1)

printf("请输入将此户籍信息修改后的新的姓名 性别 年龄 学历 住址 电话(保持原值的用*代替):\n")

scanf("%s %s %s %s %s %s",hjxx.xm,hjxx.xb,nl,hjxx.xl,hjxx.zhzh,hjxx.dh)

//因为只有nl(年龄)是int型,故对nl作特殊处理,-1表示修改时年龄保持原值不变(不修改)

hjxx.nl=(strcmp(nl,"*") ? atoi(nl) : -1)

strcpy(hjxx.shfzhh,"*")

change(hjxx,n-1)

printf("修改完成。\n")

}

else

{

printf("无法修改,不存在第%d条户籍信息。\n",n)

}

}

}

//用于判断pt[n]是否匹配hjxx的模式

int ismatch(HuJiXinXi hjxx,int n)

{

int r=1

if(strcmp(hjxx.shfzhh,"*") &&strcmp(hjxx.shfzhh,pt[n].shfzhh))

{

r=0

}

if(r &&strcmp(hjxx.xm,"*") &&strcmp(hjxx.xm,pt[n].xm))

{

r=0

}

if(r &&strcmp(hjxx.xb,"*") &&strcmp(hjxx.xb,pt[n].xb))

{

r=0

}

if(r &&-1!=hjxx.nl &&hjxx.nl!=pt[n].nl)

{

r=0

}

if(r &&strcmp(hjxx.xl,"*") &&strcmp(hjxx.xl,pt[n].xl))

{

r=0

}

if(r &&strcmp(hjxx.zhzh,"*") &&strcmp(hjxx.zhzh,pt[n].zhzh))

{

r=0

}

if(r &&strcmp(hjxx.dh,"*") &&strcmp(hjxx.dh,pt[n].dh))

{

r=0

}

return r

}

//按模式查询户籍信息

void find()

{

int i,c=0

char nl[16]

HuJiXinXi hjxx

printf("请输入要查询的户籍信息的身份z号 姓名 性别 年龄 学历 住址 电话(只需提供关键信息以用于查询,不提供的信息请用*代替):\n")

scanf("%s %s %s %s %s %s %s",hjxx.shfzhh,hjxx.xm,hjxx.xb,nl,hjxx.xl,hjxx.zhzh,hjxx.dh)

//因为只有nl(年龄)是int型,故对nl作特殊处理,-1表示查询时不需比较年龄

hjxx.nl=(strcmp(nl,"*") ? atoi(nl) : -1)

for(i=0i<counti++)

{

if(ismatch(hjxx,i))

{

printf("找到第%d条满足你的模式要求的户籍信息如下:\n",c+1)

printf("%s %s %s %d %s %s %s。\n",pt[i].shfzhh,pt[i].xm,pt[i].xb,pt[i].nl,pt[i].xl,pt[i].zhzh,pt[i].dh)

c++

}

}

if(!c)

{

printf("系统中没有满足你的模式要求的户籍信息。\n")

}

}

#include <iostream>

#include <iomanip>

#include <string>

 

using namespace std

 

typedef struct student {

    unsigned m_id

    string m_name

    unsigned m_age

    string m_sex

    string m_address

    string m_contact

    string m_dormitory

    struct student *m_next

}student

 

class CStudent {

private :

    student *head

public :

    CStudent() {

        head = new student

        head->m_id 升埋和= 0

        head->m_name = "noname"

        head->m_next = NULL

    }

    ~CStudent() {

        student *p = head,*q

        while(p) {

            q = p

            p = q->m_next

            delete q

        }

    }

    student readdata(int model) // model = 1:不读取学号,2:不读取姓名,其他,读取所有信息

    void entering()

    bool insert(const student &astu)

    student *findid(unsigned id) const

    student *findname(const string &name) const

    student *findsex(const string &sex) const

    student *finddormitory(const string &dormitory) const

    unsigned boys() const

    unsigned girls() const

    unsigned headcount() const

    bool eraseid()

   液枝 bool erasename()

    bool modifyid()

    bool modifyname()

    void Show() const

    void query() const

    void friend statistics(const CStudent &aclss)

    void friend erase(CStudent &aclss)

    void friend modify(CStudent &aclss)

}

 

string readstring() {

    string str

    while(cin.get() != '\n')

    cin >> str

    return str

}

 

student CStudent::readdata(int model) {

    student tmp

    if(model != 1) { cout << "学    号: " cin >> tmp.m_id }

    if(model != 2) { cout << "姓    名: " tmp.m_name = readstring() }

    cin >> tmp.m_age

    cout << "性    别: "

    tmp.m_sex = readstring()

    cout << "住    址: "

    tmp.m_address = readstring()

    cout << "联系方式: "

    tmp.m_contact  =readstring()

    cout << "寝    室: "

    tmp.m_dormitory = readstring()

    return tmp

}

 

void CStudent::entering() {

    student tmp

    cout << "学号(0 to return): "

    cin >> tmp.m_id

    while(tmp.m_id) {

        if(findid(tmp.m_id) == NULL) {

            cout << "姓    名: "

            tmp.m_name = readstring()

            cout << "年    龄: "

            cin >> tmp.m_age

            cout << "性    别: "吵盯

            tmp.m_sex = readstring()

            cout << "住    址: "

            tmp.m_address = readstring()

            cout << "联系方式: "

            tmp.m_contact = readstring()

            cout << "寝    室: "

            tmp.m_dormitory = readstring()

            insert(tmp)

        }

        else cout << "重复的学号:" << tmp.m_id << endl

        cout << "学号(0 to return): "

        cin >> tmp.m_id

    }

}

 

student *CStudent::findid(unsigned id) const {

    student *p

    for(p = head p->m_next p = p->m_next)

        if(p->m_next->m_id == id) return p

    return NULL

}

 

student *CStudent::findname(const string &name) const {

    student *p

    for(p = head p->m_next p = p->m_next)

        if(p->m_next->m_name == name) return p

    return NULL

}

student *CStudent::findsex(const string &sex) const {

    student *p

    for(p = head p->m_next p = p->m_next)

        if(p->m_next->m_sex == sex) return p

    return NULL

}

 

student *CStudent::finddormitory(const string &dormitory) const {

    student *p

    for(p = head p->m_next p = p->m_next)

        if(p->m_next->m_dormitory == dormitory) return p

    return NULL

}

 

bool CStudent::insert(const student &astu) {

    student *newnode,*p = head

    if(p->m_next == NULL) {

        p->m_next = new student(astu)

        p->m_next->m_next = NULL

        return true

    }

    while(p->m_next) {

        if(p->m_next->m_id == astu.m_id) {

            cout << "重复的学号,插入失败!\n"

            return false

        }

        if(p->m_next->m_id > astu.m_id) {

            newnode = new student(astu)

            newnode->m_next = p->m_next

            p->m_next = newnode

            return true

        }

        p = p->m_next

    }

    p->m_next = new student(astu)

    p->m_next->m_next = NULL

    return true

}

 

unsigned  CStudent::boys() const {

    unsigned cnt = 0

    student *p

    for(p = head->m_next p p = p->m_next)

        if(p->m_sex == "男") ++cnt

    return cnt

}

 

unsigned CStudent::girls() const {

    unsigned cnt = 0

    student *p

    for(p = head->m_next p p = p->m_next)

        if(p->m_sex == "女") ++cnt

    return cnt

}

 

unsigned CStudent::headcount() const {

    unsigned cnt = 0

    student *p

    for(p = head->m_next p p = p->m_next,++cnt)

    return cnt

}

 

bool CStudent::eraseid() {

    student *q,*p

    unsigned id

    cout << "输入要删除的学号:"

    cin >> id

    p = findid(id)

    if(p == NULL) {

        cout << "没有找到学号是\"" << id << "\"的学生,删除失败!\n"

        return false

    }

    q = p->m_next

    p->m_next = q->m_next

    delete q

    return true

}

bool CStudent::erasename() {

    student *q,*p

    string name

    cout << "输入要删除人的姓名:"

    name = readstring()

    p = findname(name)

    if(p == NULL) {

        cout << "没有找到姓名是\"" << name << "\"的学生,删除失败!\n"

        return false

    }

    q = p->m_next

    p->m_next = q->m_next

    delete q

    return true

}

 

bool CStudent::modifyid() {

    student tmp,*p

    unsigned id

    cout << "输入要修改的学号:"

    cin >> id

    p = findid(id)

    if(p == NULL) {

        cout << "没有找到学号是\"" << id << "\"的学生,修改失败!\n"

        return false

    }

    tmp = readdata(1)

    tmp.m_id = id

    *p = tmp

    return true

}

 

bool CStudent::modifyname() {

    student *p,tmp

    string name

    cout << "输入要修改人的姓名:"

    name = readstring()

    p = findname(name)

    if(p == NULL) {

        cout << "没有找到姓名是\"" << name << "\"的学生,修改失败!\n"

        return false

    }

    tmp = readdata(2)

    tmp.m_name = name

    *p = tmp

    return true

}

 

int menu() {

    int choice

    do {

        system("cls")

        cout << "\t****************************\n"

        cout << "\t*   学生基本信息管理系统   *\n"

        cout << "\t*==========================*\n"

        cout << "\t*    1、录入学生信息       *\n"

        cout << "\t*    2、显示学生信息       *\n"

        cout << "\t*    3、查询学生信息       *\n"

        cout << "\t*    4、添加学生信息       *\n"

        cout << "\t*    5、统计学生信息       *\n"

        cout << "\t*    6、删除学生信息       *\n"

        cout << "\t*    7、修改学生信息       *\n"

        cout << "\t*    0、退出管理系统       *\n"

        cout << "\t****************************\n"

        cout << "\n\t请选择:"

        cin >> choice

    }while(choice < 0 || choice > 7)

    return choice

}

 

void show(student *p) {

    cout << p->m_id << " " << p->m_name << " " << p->m_age << " "

    cout << p->m_sex << " " << p->m_address << " "

    cout << p->m_contact << " " << p->m_dormitory << endl

}

 

void CStudent::Show() const {

    student *p

    cout << "----------------------------------------------------------\n"

    for(p = head->m_next p p = p->m_next) show(p)

    cout << "----------------------------------------------------------\n"

    system("pause")

}

 

void CStudent::query() const {

    int select

    unsigned id

    string name

    student *p

    cout << "1、按学号查询\n2、按姓名查询\n0、返回\n"

    cin >> select

    switch(select) {

        case 1 : cout << "请输入学号:" cin >> id

            if(p = findid(id)) show(p->m_next)

            break

        case 2 : cout << "请输入姓名:" name = readstring()

            if(p = findname(name)) show(p->m_next)

            break

        case 0 : return

        default : cout << "选择错误。\n"

    }

    system("pause")

}

 

void statistics(const CStudent &a) {

    unsigned total = a.headcount()

    unsigned boys = a.boys()

    unsigned girls = a.girls()

    cout << "学生总数:" << total << "人。\n"

    cout << "其中,男生:" << boys << "名。"

    cout << "女生:" << girls << "名。\n"

    system("pause")

}

 

void erase(CStudent &a) {

    int select

    unsigned id

    string name

    student *p,*q

    cout << "1、按学号删除\n2、按姓名删除\n0、返回\n"

    cin >> select

    switch(select) {

        case 1 : cout << "请输入学号:" cin >> id

            if(p = a.findid(id)) {

                q = p->m_next

                p->m_next = q->m_next

                delete q

                cout << "成功删除 " << id << " 的信息。\n"

            }

            break

        case 2 : cout << "请输入姓名:" name = readstring()

            if(p = a.findname(name)) {

                q = p->m_next

                p->m_next = q->m_next

                delete q

                cout << "成功删除 " << name << " 的信息。\n"

            }

            break

        case 0 : return

        default : cout << "选择错误。\n"

    }

    system("pause")

}

 

void modify(CStudent &a) {

    int select

    cout << "1、按学号修改\n2、按姓名修改\n0、返回\n"

    cin >> select

    switch(select) {

        case 1 : if(a.modifyid()) cout << "修改成功。\n" break

        case 2 : if(a.modifyname()) cout << "修改成功。\n" break

        case 0 : return

        default : cout << "选择错误。\n"

    }

    system("pause")

}

 

int main() {

    CStudent a

    int an

    do {

        an = menu()

        switch(an) {

            case 1 : a.entering() break

            case 2 : a.Show() break

            case 3 : a.query() break

            case 4 : a.entering() break

            case 5 : statistics(a) break

            case 6 : erase(a) break

            case 7 : modify(a) break

            case 0 : break

            default : cout << "选择错误。\n" break

        }

    }while(an)

    return 0

}

512行的

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<malloc.h>

//***********************函数声明*********************

int menu()//菜单

struct scorenode *create(void)//创建链表,并返回链表的头指针

struct scorenode *load() //调用导入学生记录函数

struct scorenode *search(struct scorenode *) //成绩查询函数

struct scorenode *del(struct scorenode *) //删除学生资料

struct scorenode *add(struct scorenode *) //追加学生资料

void print_s(struct scorenode *) //显示学生资掘芹侍料

void statistics(struct scorenode *) //统计学生成绩函数

void save(struct scorenode *) //保存学生资料

void sort(struct scorenode *) //排序函数

//*******************数据定义*************************

struct scorenode

{

int number //学号

char name[10] //姓名

float physics //物理成绩

float english //英语成绩

float maths //数学成绩

struct scorenode *next//存储下一个结点的地址

}

int n //n为全局变量,存储录入的人数

//*********************主程序*************************

void main()

{

struct scorenode *head=NULL,*stu=NULL //定义链表头指针为空

int k

while(1)

{

k=menu()

switch(k)

{

case 1:head=create()break //创建链表,录入数据

case 2:head=load()break //调用导入判吵学生函首正数

case 3:head=search(head)break //成绩查询函数函数

case 4:head=del(head)break //删除学生资料函数

case 5:head=add(head)break //追加学生资料函数

case 6:print_s(head)break //显示学生资料函数

case 7:statistics(head)break//统计学生成绩函数

case 8:save(head)break //保存学生的资料

case 9:sort(head)break //排序函数

case 0:exit(0)

default:printf("输入错误,请重试!\n")

}

}

}

//*********************菜单选择界面**********************

int menu()

{

int i,k

printf("\n\t\t\t欢迎进入成绩管理系统\n\n")

printf("\t\t\t04电子应用\n")

for(i=0i<80i++)

printf("*")

printf("1.输入学生的资料\t 2.从文件调入资料\t 3.查询学生的成绩\n")

printf("4.删除学生的资料\t 5.追加学生的资料\t 6.显示学生的成绩\n")

printf("7.统计学生的成绩\t 8.保存输入的资料\t 9.对成绩进行排序\n")

printf("0.退出\n")

for(i=0i<80i++)

printf("*")

printf("请选择您的 *** 作:")

scanf("%d",&k) //读取输入的选择

getchar() //吸收回车符

return(k)

}

//***************创建链表,并返回链表的头指针******************

struct scorenode *create(void)

{

struct scorenode *head=NULL //定义链表头指针为空

struct scorenode *p1,*p2,*p3

int i

n=0

p1=p2=p3=(struct scorenode*)malloc(sizeof(struct scorenode)) //开辟一个新的存储单元

while(1)

{

printf("请输入学生资料,输(0)退出!\n")

repeat:

printf("请输入学号(学号应大于0):")

scanf("%d",&p1->number)

while(p1->number<0) //判断输入学号是否正确

{

printf("输入错误,请重新输入学号:")

scanf("%d",&p1->number)

}

getchar() //吸收回车符

if(p1->number==0)//输入为0,退出

goto endd

else

{

p3=head

if(n>0)

{

for(i=0i<ni++)

{

if(p1->number!=p3->number) //判断输入的学号是否重复

p3=p3->next

else

{

printf("学号重复,请重输!\n")

goto repeat

}

}

}

}

printf("请输入姓名:")

scanf("%s",&p1->name)

printf("请输入物理,英语,数学成绩(0-100):")

scanf("%f,%f,%f",&p1->physics,&p1->english,&p1->maths)

while(p1->physics<0||p1->physics>100||p1->english<0||p1->english>100

||p1->maths<0||p1->maths>100)//判断输入的成绩数据是否正确

{

printf("输入错误,请重新输入成绩:")

scanf("%f,%f,%f",&p1->physics,&p1->english,&p1->maths)

}

getchar() //吸收回车符

n=n+1 //录入的人数加1

if(n==1)

head=p1

else

{

p2->next=p1

p2=p1 //存储此次录入的数据

}

p1=(struct scorenode*)malloc(sizeof(struct scorenode)) //开辟一个新的存储单元

}

endd:

p2->next=NULL

save(head)

return(head) //返回此次录入的链表值

}

//***********************保存学生资料************************

void save(struct scorenode *p1)

{

FILE *fp

if((fp=fopen("scroce.txt","w"))==NULL)

{

printf("不能打开文件!\n")

}

while(p1!=NULL)

{

fprintf(fp,"%d\t%s\t%.1f\t%.1f\t%.1f\n",p1->number,p1->name,p1->physics,

p1->english,p1->maths)

p1=p1->next //下移一个结点

}

fclose(fp)

printf("文件已保存!\n")

}

//****************调用导入学生记录函数********************

struct scorenode *load()

{

FILE *fp

struct scorenode *p1,*p2,*head

int m=0

if((fp=fopen("scroce.txt","r"))==NULL) //打开文件

{

printf("不能打开文件!\n")

return 0

}

printf("\n\t\t成绩管理系统\n\n")

printf("\t\t 04电子应用\n")

printf("---------------------------------------------------------\n")

printf("学号\t姓名\t物理\t英语\t数学\t\n")

printf("---------------------------------------------------------\n")

head=NULL

p1=p2=(struct scorenode*)malloc(sizeof(struct scorenode)) //开辟一个新的存储单元

while(!feof(fp))//文件是否结束

{

fscanf(fp,"%d%s%f%f%f",&p1->number,&p1->name,&p1->physics,

&p1->english,&p1->maths) //从文件中读入数据

printf("%d\t%s\t%.1f\t%.1f\t%.1f\n",p1->number,p1->name,p1->physics,

p1->english,p1->maths)//打印数据

m=m+1

if(m==1)

head=p1

else

{

p2->next=p1 //指向下一个节点

p2=p1

}

p1=(struct scorenode*)malloc(sizeof(struct scorenode)) //开辟一个新的存储单元

}

p2->next=NULL

printf("---------------------------------------------------------\n")

fclose(fp)

return head

}

//**********************成绩查询函数*****************************

struct scorenode *search(struct scorenode *head)

{

int number

struct scorenode *p1,*p2

printf("\n请输入要查询的学生的学号(0)退出:")

scanf("%d",&number)//读取输入的学号

printf("---------------------------------------------------------\n")

printf("学号\t姓名\t物理\t英语\t数学\t\n")

printf("---------------------------------------------------------\n")

while(number!=0)//输入是0,退出

{

getchar() //吸收回车符

if(head==NULL) //判断链表中是否有数据

{

printf("\n没有任何学生资料!\n")

return(head)

}

p1=head

while(number!=p1->number&&p1->next!=NULL) //判断链表中数据是否结束

{

p2=p1

p1=p1->next//指向链表下一个结点

}

if(number==p1->number)

{

printf("%d\t%s\t%.1f\t%.1f\t%.1f\n",p1->number,p1->name,p1->physics,

p1->english,p1->maths)//打印数据

printf("---------------------------------------------------------\n")

}

else

printf("%d号学生不存在!\n",number)

printf("输入要查询的学生的学号(0)退出:")

scanf("%d",&number)

}

printf("退出查询!\n")

return(head)

}

//*************************删除学生资料***********************************

struct scorenode *del(struct scorenode *head)

{

struct scorenode *p1,*p2

int number

printf("\n请输入要删除的学生的学号(0)退出:")

scanf("%d",&number)//读取输入的学号

while(number!=0)//输入是0,退出

{

if(head==NULL) //判断链表中是否有数据

{

printf("\n没有任何学生资料!\n")

return(head)

}

p1=head

while(number!=p1->number&&p1->next!=NULL) //判断链表中数据是否结束

{

p2=p1

p1=p1->next//指向链表下一个结点

}

if(number==p1->number)

{

if(p1==head) //判断链表是否是头指针

head=p1->next

else

p2->next=p1->next //删除链表

n=n-1 //学生人数减一

}

printf("输入要删除的学生的学号(0)退出:")

scanf("%d",&number)

}

printf("现在的学生数为:%d个!\n",n)

save(head)//保存资料

return(head)

}

//*******************追加学生资料****************************

struct scorenode *add(struct scorenode *head)

{

struct scorenode *p0,*p3,*stu

int i

while(1)

{

stu=(struct scorenode*)malloc(sizeof(struct scorenode)) //开辟一个新的存储单元

printf("\n输入要增加的学生资料!\n")

repeat2:

printf("请输入学号(学号应大于0):")

scanf("%d",&stu->number)

while(stu->number<0) //判断输入学号是否正确

{

printf("输入错误,请重新输入学号:")

scanf("%d",&stu->number)

}

if(stu->number==0)//输入为0,退出

goto end2

else

{

p3=head

if(n>0)

{

for(i=0i<ni++)

{

if(stu->number!=p3->number) //判断输入的学号是否重复

p3=p3->next

else

{

printf("学号重复,请重输!\n")

goto repeat2

}

}

}

}

printf("请输入姓名:")

scanf("%s",&stu->name)

printf("请输入物理,英语,数学成绩(0-100):")

scanf("%f,%f,%f",&stu->physics,&stu->english,&stu->maths)

while(stu->physics<0||stu->physics>100||stu->english<0||stu->english>100

||stu->maths<0||stu->maths>100)//判断输入的成绩数据是否正确

{

printf("输入错误,请重新输入成绩:")

scanf("%f,%f,%f",&stu->physics,&stu->english,&stu->maths)

}

getchar() //吸收回车符

stu->next=NULL

p0=head

if(p0==NULL)//都没数据

{

head=stu //存储新追加的数据

head->next=NULL

}

else

{

while(p0->next!=NULL)

p0=p0->next

p0->next=stu //存储新追加的数据

}

n=n+1//学生个数加1

}

end2:

printf("现在的学生数为:%d个!\n",n)

//sort(head)

save(head)//保存资料

return(head) //返回此次录入的链表值

}

//***********************显示学生资料**************************

void print_s(struct scorenode *head)

{

struct scorenode *p

if(head==NULL)

printf("\n没有任何学生资料!\n")

else

{

printf("总人数:%d\n",n) //显示总人数

printf("---------------------------------------------------------\n")

printf("学号\t姓名\t物理\t英语\t数学\t\n")

printf("---------------------------------------------------------\n")

p=head

while(p!=NULL)

{

printf("%d\t%s\t%.1f\t%.1f\t%.1f\n",p->number,p->name,p->physics,

p->english,p->maths)//打印数据

p=p->next //指向下一结点

}

printf("---------------------------------------------------------\n")

}

}

//*****************统计学生成绩函数************************

void statistics(struct scorenode *head)

{

float sum,sum1=0,sum2=0,sum3=0,ave,ave1=0,ave2=0,ave3=0,max=0,min=0

struct scorenode *p

int y=0,i=0

p=head

if(head==NULL)

printf("\n没有任何学生资料!\n")

else

{

printf("---------------------------------------------------------\n")

printf("学号\t姓名\t物理\t英语\t数学\t总分\t平均分\n")

printf("---------------------------------------------------------\n")

while(p!=NULL)

{

sum=p->physics+p->english+p->maths //计算个人总分

ave=sum/3 //计算个人平均分

printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",p->number,p->name,p->physics,

p->english,p->maths,sum,ave)//打印数据

sum1=sum1+p->physics //累加物理分数

sum2=sum2+p->english //累加英语分数

sum3=sum2+p->maths //累加数学分数

y=y+1 //计算人数

if(max<sum)

max=sum//计算最高分

else if(min>sum)

min=sum//计算最低分

p=p->next //指向下一结点

}

ave1=sum1/y//计算物理平均分

ave2=sum2/y//计算英语平均分

ave3=sum3/y//计算数学平均分

printf("物理平均分:%.1f\n",ave1)

printf("英语平均分:%.1f\n",ave2)

printf("数学平均分:%.1f\n",ave3)

printf("总分最高分:%.1f\n",max)

printf("总分最低分:%.1f\n",min)

printf("\n")

}

}

//******************结点中数据交换*******************

void swap(struct scorenode *max,struct scorenode *p)

{

int k

char t[10]

float temp

k=max->number

max->number=p->number

p->number=k

strcpy(t,max->name)

strcpy(max->name,p->name)

strcpy(p->name,t)

temp=max->physics

max->physics=p->physics

p->physics=temp

temp=max->english

max->english=p->english

p->english=temp

temp=max->maths

max->maths=p->maths

p->maths=temp

}

//*****************排序函数***************************

void sort(struct scorenode *head)

{

struct scorenode *p,*max

int i,j,x

if(head==NULL)

{

printf("\n没有任何学生资料,请先建立链表!\n")

}

for(i=0i<80i++)

printf("*")

printf("1.按学生学号排序\t2.按学生姓名排序\t3.按物理成绩排序\n")

printf("4.按英语成绩排序\t5.按数学成绩排序\n")

printf("请选择 *** 作(0)退出:")

scanf("%d",&x) //读取输入的选择

getchar()

for(i=0i<80i++)

printf("*")

switch(x)

{

case 1: //学号排序

for(i=1i<ni++)

{

max=p=head

p=p->next

for(j=0j<n-ij++)

{

if(max->number>p->number)

swap(max,p)

p=p->next

max=max->next

}

}

print_s(head)break //打印数据

case 2:

for(i=1i<ni++)//姓名排序(冒泡方式)

{

max=p=head

p=p->next

for(j=0j<n-ij++)

{

if(strcmp(max->name,p->name)>0)

swap(max,p)

p=p->next

max=max->next

}

}

print_s(head)break

case 3:

for(i=1i<ni++)//按物理成绩排序

{

max=p=head

p=p->next

for(j=0j<n-ij++)

{

if(max->physics>p->physics)

swap(max,p)

p=p->next

max=max->next

}

}

print_s(head)break

case 4:

for(i=1i<ni++) //按英语成绩排序

{

max=p=head

p=p->next

for(j=0j<n-ij++)

{

if(max->english>p->english)

swap(max,p)

p=p->next

max=max->next

}

}

print_s(head)break

case 5:

for(i=1i<ni++) //按数学成绩排序

{

max=p=head

p=p->next

for(j=0j<n-ij++)

{

if(max->maths>p->maths)

swap(max,p)

p=p->next

max=max->next

}

}

print_s(head)break

case 0:

break

}

save(head) //保存排序后的数据

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12336348.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存