广嵌科技  广嵌教育  English  
 
首页 > 软件开发 > C/C++ > 学生管理系统(C原代码)
学生管理系统(C原代码)
来源:苏科大 作者:王铁龙 时间:2008-05-26 发布人:lihom

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define STUDENT struct student
#define LEN sizeof(STUDENT)
#include<stdarg.h>
#include <stdlib.h>
#include <conio.h>     
STUDENT
{      
 long num;
 char name[5];
 int math;
 int english;
 int chengxu;
 int average;
 STUDENT *next;
};
int n=0;     
void menu() 
{
 printf("**************成绩管理系统**************\n");
    printf("\t1--成绩输入;\t2--显示成绩\n");
 printf("\t3--成绩查询;\t4--删除成绩\n");
 printf("\t5--排列成绩;\t6--插入成绩\n");
    printf("\t7--在文件中保存成绩;\t0--退出\n");
 printf("************************************************\n");
    printf("请选择(0--7):");
}
char choice()
{
 char select;
// while( !_kbhit());  
    select=getche();       
 return (select);
}

STUDENT *create()

 STUDENT *head,*p1,*p2;   
 p1=p2=(STUDENT *)malloc(LEN);
 scanf("%ld %s %d %d %d",&p1->num,p1->name,&p1->math,&p1->english,&p1->chengxu);
 p1->average=(p1->math+p1->english+p1->chengxu)/3;
 head=NULL;
 while (p1->num!=0)
 {
  n++;
  if(n==1)
   head=p1;  
  else
   p2->next=p1;  
  p2=p1;
  p1=(STUDENT *) malloc(LEN);
  scanf("%ld %s %d %d %d",&p1->num,p1->name,&p1->math,&p1->english,&p1->chengxu);
     p1->average=(p1->math+p1->english+p1->chengxu)/3;
 }
 p2->next=NULL;  
 free(p1);
 return(head);
}

void print(STUDENT *head)
{       
 STUDENT *p;
 p=head;
 if(head!=NULL)
  do
  {
   printf("%ld\t%s\t%d\t%d\t%d\t%d\n", p->num, p->name,p->math,p->english,p->chengxu,p->average);
   p=p->next;
  }while(p!=NULL);
}
void search(STUDENT *head,char nam[])
{
 STUDENT *p5;
 if(head==NULL)
 {
  printf("\nlist null!\n");
 }
 p5=head;
 while(strcmp(p5->name,nam)&&p5->next!=NULL)
  p5=p5->next;
 if(strcmp(p5->name,nam)==0)
 {
  printf("\n该同学成绩为:\n");
  printf("学号\t姓名\t数学\t英语\t程序\t平均分\n");
  printf("%ld\t%s\t%d\t%d\t%d\t%d\n",p5->num, p5->name,p5->math,p5->english,p5->chengxu,p5->average);
 }
}
STUDENT *del(STUDENT *head,long num)
{
 STUDENT *p6,*p7;
 if(head==NULL)     
 {
  printf("\n list null!=\n");
  return (head);
 }
 p6=head;
 while(num!=p6->num &&p6->next!=NULL) 
 {
  p7=p6;
  p6=p6->next;
 }
 if(num==p6->num)
 {
  if(p6==head)
   head=p6->next;  
  else
   p7->next=p6->next;  
  printf ("delete: %ld \n", num);
  n--;
  
 }
 else
  printf ("%ld not been found!\n", num);
  return(head);
}
STUDENT *sort(STUDENT *head)
{
 STUDENT *temp,*t,*p3,*p4;
    temp=head;
 head=NULL;
 while(temp!=NULL)
 {
  t=temp;
  temp=temp->next;
  if(head!=NULL&&head->average<t->average)
  {
   p3=head;
   while(p3!=NULL&&p3->average<t->average)
   {
    p4=p3;
    p3=p3->next;
   }
   t->next=p3;
   p4->next=t;
  } 
  else
  {
   t->next=head;
   head=t;
  }

 }
 return(head);
}
STUDENT *insert( STUDENT *head, STUDENT *stud)
{
    STUDENT *p3,*p4;
 if(head!=NULL&&head->average<stud->average)
 {
  p3=head;
  while(p3!=NULL&&p3->average<stud->average)
  {
   p4=p3;
   p3=p3->next;
  }
  stud->next=p3;
  p4->next=stud;
 } 
 else
 {
  stud->next=head;
  head=stud;
 }
 n++;
 return (head);
}
void save(STUDENT *head)
{
    FILE *fp;
    STUDENT *p;
    fp=fopen("d:\\student.txt","wb");
    if(fp==NULL)
    {
        printf("无法打开!");
        exit(0);
    }
    p=head;
 while(p!=NULL)
 {
  fwrite(p,LEN,1,fp);
  p=p->next;
 }
 fclose(fp);
}
STUDENT *load()
{
 FILE *fp;
    STUDENT *q,*head=NULL;
 fp=fopen("d:\\student.txt","rb");
    if(fp==NULL)
    {
        return head;
    }
    while(!feof(fp))
    {
  q=(STUDENT *)malloc(LEN);
        if(fread(q,LEN,1,fp)==1)
  {
   q->next=head;
   head=q;
   n++;
  }
 }
  fclose(fp);
  return head;
}


int main(int argc, char *argv[])
{
 STUDENT *head,*stu;
 long del_num;
 char select,nam[5];
 select=0;
 head=load();
 while(select!='0')
    {
            system("cls");    
            menu();
            select=choice();
         switch(select)
   {
                 case '0':
                      printf("\n您选择的是退出!\n");
                      _beep(300,400);
                      continue;
                 case '1':
       printf("\n您选择的是成绩输入!\n");
       printf("\n请输入成绩!\n");
       printf("学号\t姓名\t数学\t英语\t程序\n");
       head=create();
                      break;
                 case '2':
                      printf("\n您选择的是显示成绩!\n");
       printf("\n全部成绩为:\n");
       printf("学号\t姓名\t数学\t英语\t程序\t平均分\n");
          print(head);
                      break;
                 case '3':
       printf("\n您选择的是成绩查询!\n");
       printf("\n请输入要查寻的姓名:");
       scanf("%s",nam);
                      search(head,nam);
                      break;
                 case '4':
                      printf("\n您选择的是删除成绩!\n");
       printf("\n请输入要删除同学的学号:");
       scanf("%ld",&del_num);
       head=del(head,del_num);
       printf("\n删除后所有成绩为:\n");
       printf("学号\t姓名\t数学\t英语\t程序\t平均分\n");
                      print(head);
                      break;
                 case '5':
       printf("\n您选择的是排列成绩!\n");
                      head=sort(head);
       printf("\n排列后的所有成绩为:\n");
       printf("学号\t姓名\t数学\t英语\t程序\t平均分\n");
                      print(head);
       break;
                 case '6':
                      printf("\n您选择的是插入成绩!\n");
       printf("\n请输入插入成绩的信息!\n");
       printf("学号\t姓名\t数学\t英语\t程序\t平均分\n");
       stu=(STUDENT *)malloc(LEN);
       scanf("%ld %s %d %d %d",&stu->num,stu->name,&stu->math,&stu->english,&stu->chengxu);
                      stu->average=(stu->math+stu->english+stu->chengxu)/3;
                      head=insert(head,stu);
       printf("\n插入后所有成绩为:\n");
       printf("学号\t姓名\t数学\t英语\t程序\t平均分\n");
                      print(head);
       break;
                 case '7':
                      printf("\n您选择的是在文件中保存成绩!\n");
                      save(head);
       printf("\n保存成功!\n");
       break;
     default:
       printf("\n您的选择是错误的!\n");
            }
   system("PAUSE");
    }
    return (0);

 

 

·上一条:离子迁移谱仪嵌入式系统的设计
·下一条:C#编程实用技巧:轻松实现对文件的操作

评论
发布者 标题 发布日期
暂没有任何评论
以下发言只是广嵌网会员个人意见,非本网立场 查看更多评论

发表评论
·尊重网上道德,遵守中华人民共和国的各项有关法律法规。
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任。
·本站管理人员有权保留或删除其管辖留言中的任意内容,本站有权在网站内转载或引用您的评论。
·参与本评论即表明您已经阅读并接受上述条款。
标题:
发布者:
内容:
验证码:

相关信息
·.Net(C#)开发漫谈..
·.Net(C#)开发漫谈..
·C#编程实用技巧:轻松实..
·学生管理系统(C原代码)
·嵌入式智能人机界面与PL..
·嵌入式系统编程中的代码优..
·C++对象布局及多态实现..
·C和C++里面的lval..
·C语言平台缩短SoC前期..
·用Visual C++实..
Copyright ©2005-2007 广东省嵌入式软件公共技术中心.All Rights Reserved.版权所有 复制必究
客户服务支持:020-32068395-832 24小时服务热线:13631411558
技术支持与报障:gdesc@midea.com.cn 020-32068395-807/809
粤ICP备05104135号