`

嵌入式之LINUX--C学生管理系统

 
阅读更多

http://blog.csdn.net/liuzongming1988

 

 

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

#define LEN sizeof(struct student)

int n;


/*  printf("/**AUTHOR: Lzm  ** 2013-10-28 ****/\n");
//	printf("/**Student score record system****/\n");
//	printf("/**Select what you want to do:****/\n");
//	printf("/***0 : create a document!  ******/\n");
//	printf("/***1 : insert a new record!******/\n");
//	printf("/***2 : delete a record!    ******/\n");
//	printf("/***3 : save the records!  *******/\n");
//	printf("/***4 : Open a exited file! ******/\n");
//	printf("/***5 : quit the system!    ******/\n");
*/

struct student{
  long num;
  float score;
  struct student *next;
};// Don't forget the ";"!!!!!!!!

//1.Create a new chain table list
struct student * creat(void){
  struct student *head;
  struct student *p1,*p2;
  char temp;
  n=0;
  p1=p2=(struct student *)malloc(LEN);/*CREAT A NEW UNIT*/
  printf("Enter school_number and score:\n");
  printf("Enter 0  0 to quit!\n");
  scanf("%ld %f",&p1->num,&p1->score);
  head=NULL;
  while(p1->num !=0)                // if the num is 0,it is the end of the input
  {
    n=n+1;                          //calculate the number of the member in list
    if(n==1)
	head=p1;                    //if it is the first one,give the address to the head
    else 
	p2->next=p1;               //give the new UNIT address to the last UNIT'S next

    p2=p1;                         //p2 is to save the address of the last.
    p1=(struct student *)malloc(LEN);// malloc() a new mem
    printf("Enter school_number and score:\n");
    scanf("%ld %f",&p1->num,&p1->score);
  }

    p2->next=NULL;
    return (head);
}

//2.show a chain table list
void print(struct student *head){
    struct student* p;
    printf("Now ,These %d records are:\n",n);
    p=head;
    if(head!=NULL){
      do{
	printf("num:%-8ld score:%5.1f\n",p->num,p->score);
    	p=p->next;                            //point to the next UNIT
	}while(p!=NULL);
    }
}


//3.delet the member in a chain table list
struct student * del(struct student *head,long num){
    struct student *p1,*p2,*p3;
    if(head==NULL){
	printf("\n list is null\n");
    	goto end;
    };
    p1=head;
    while(num!=p1->num&&p1->next!=NULL){
        p2=p1;
        p1=p1->next;
    }
    if(num==p1->num){
        if(p1==head)
		{
		p3=head;//to free
		head=p1->next;
		}
        else 
		{
		p3=p1;//to free
		p2->next=p1->next;
		}

	free(p3);//free the malloc, free has no return value,it is a void func.

        printf("delete:%ld successful\n",num);
        n=n-1;
    }
    else 
	printf("can't find the student: %ld\n",num);

  end:
    return (head);
}


//4.save the traintable into a file
void save_train(struct student *head){
    struct student *p;
    char address[40];
    FILE *fp;

    if(head==NULL){
	printf("\n list is null\n");
    	goto end;
    };

    printf("Enter the path!\n");
    scanf("%s",&address[0]);
    
    puts(address);//////////////////

    fp = fopen(address,"wb+");// create a new file
    fputs("school_number",fp);
    fputs("      score   ",fp);

     p=head;
    if(head!=NULL){
      do{
	fputc('\n',fp);                    // enter a Enter 
	fprintf(fp,"   %-10ld",p->num);	   //read the num to num
	fprintf(fp,"    %-3.2f",p->score); //read the score to score
    	p=p->next;                            //point to the next UNIT
	}while(p!=NULL);
    }
    printf("save success to %s \n",address);
    fclose(fp);//you should close the file 
  end:
    ;
}

//5.insert a chain table list  from little to big
struct student *insert(struct student *head,struct student *stu){
    struct student *p0,*p1,*p2;
    p1=head;
    p0=stu;

   if(head==NULL){
      head = p0; p0->next=NULL;
   }
   else{
      while((p0->num > p1->num)&&(p1->next!=NULL))
		{
		   p2=p1;
		   p1=p1->next;
		}
	if(p0->num  <=  p1->num){
            if(head == p1) head = p0;
            else p2->next=p0;
           p0->next = p1;
        }
        else{//That is p1->next == NULL
	   p1->next=p0;
	   p0->next=NULL;	
	}
	n=n+1;
   }
   return head;
}

//6.print the head messages!!!
void print_message(){
	printf("/**AUTHOR: Lzm  ** 2013-10-28 ****/\n");
	printf("/**Student score record system****/\n");
	printf("/**Select what you want to do:****/\n");
	printf("/***0 : create a document!  ******/\n");
	printf("/***1 : insert a new record!******/\n");
	printf("/***2 : delete a record!    ******/\n");
	printf("/***3 : save the records!  *******/\n");
	printf("/***4 : Open a exited file! ******/\n");
	printf("/***5 : quit the system!    ******/\n");
}


//7.import a file as chaintable list
struct student * open_chain(void){

  struct student *head;
  struct student *p1,*p2;
  FILE *fp;

  char address[40],a[20];

   printf("Enter the path!\n");
   scanf("%s",&address[0]);

   fp = fopen(address,"rb");// read a file
   if(fp == NULL) return 0;
   if(!feof(fp)){
	fscanf(fp,"%s",&a[0]);
        fscanf(fp,"%s",&a[0]);
	}
   n=0;  
   p1=p2=(struct student *)malloc(LEN);/*CREAT A NEW UNIT*/
   head=NULL;

  while(!feof(fp)){
        fscanf(fp,"%ld",&p1->num);
        fscanf(fp,"%f",&p1->score);
    n=n+1;                          //calculate the number of the member in list
    if(n==1)
	head=p1;                    //if it is the first one,give the address to the head
    else 
	p2->next=p1;               //give the new UNIT address to the last UNIT'S next

    p2=p1;                         //p2 is to save the address of the last.
    p1=(struct student *)malloc(LEN);// malloc() a new mem
  }

    p2->next=NULL;
    printf("read ok!");
    close(fp);
    return (head);
}
//the main
int main(){ 
  struct student *p,*stu;
  long int num;

  char select = -1;
  char insert_quit=0;
  char delete_quit= 0;

  print_message();
  scanf("%d",&select);
  putchar('\n');

  while(1)
  {// main while
  	switch (select)
  	{
  	  case 0 :  p=creat();   //create
                    break;
	
  	  case 1 :  {            //insert
			 stu = (struct student *)malloc(LEN);
 			 printf("Enter the num and score:\n");
			  printf("Enter 0  0 to quit!\n");
 			 scanf("%ld%f",&stu->num,&stu->score);
 			 while(stu->num !=0){
 			 	 p=insert(p,stu);////////////////
 				 stu = (struct student *)malloc(LEN);
 				 printf("Input the num and score:\n");
  				 scanf("%ld%f",&stu->num,&stu->score);
 			  };
			break;
			}
	
  	  case 2 :  printf("Enter the num:\n");    //delete  
		    printf("Enter 0 to quit\n");        
		      scanf("%ld",&num);
  	            while(num !=0){
  		      		p=del(p,num);
  		      		print(p);
				printf("Put into the num:\n");
				scanf("%ld",&num);
			}
		      break;
	
  	  case 3 :  save_train(p);
			goto step1;
			break;    //save

  	  case 4 :  p=open_chain();
			break;


	  case 5 :
          default: goto endm;
	
  	}
	
  	select = -1;
	system("clear");
	print_message();
	print(p);

    step1:
	printf("/**Select what you want to do!****/\n");
  	scanf("%d",&select);
  	putchar('\n');

  }// end of main while
  endm:
//
  return 0;
}



 

分享到:
评论

相关推荐

    嵌入式系统原理-学生信息管理系统.doc

    《嵌入式系统原理-学生信息管理系统》 嵌入式系统是计算机科学中的一个重要领域,它涉及硬件和软件的结合,通常用于特定的功能或应用。在这个实验报告中,我们关注的是一个基于嵌入式系统原理的学生信息管理系统。...

    (2)嵌入式系统课程----实验系统课件 (北航国家精品课程)

    3. **嵌入式操作系统**:介绍实时操作系统(RTOS)如FreeRTOS、VxWorks,以及Linux在嵌入式系统中的应用和移植。 4. **存储系统**:讲解RAM、ROM、闪存等存储设备在嵌入式系统中的角色和选择原则。 5. **外设接口*...

    高教类课件:arm9嵌入式系统设计-基于S3C2410与LINUX

    总的来说,《高教类课件:ARM9嵌入式系统设计-基于S3C2410与LINUX》是一套全面且实用的教程,涵盖了嵌入式系统开发的多个关键领域,旨在帮助学生和工程师掌握ARM架构处理器上的嵌入式Linux系统设计,为他们在物联网...

    一步一步写嵌入式操作系统--ARM编程的方法与实践电子书+软件工具+源码

    ARM架构支持多种操作系统,如Linux、Android等,同时也支持各种嵌入式实时操作系统。 #### 三、ARM编程基础 1. **汇编语言**:在嵌入式开发中,汇编语言是最接近硬件的语言之一,它允许开发者直接控制硬件资源。...

    嵌入式Linux视频教程全套2011新版-国嵌嵌入式培训下载地址

    - **嵌入式linux系统架构**: 介绍嵌入式Linux系统的架构。 - **交叉工具链**: 介绍使用交叉编译器为嵌入式平台编译代码的方法。 - **Bootloader介绍**: 介绍Bootloader的概念和作用。 - **U-Boot介绍**: 详细...

    嵌入式linux应用程序开发-课程大纲

    ### 嵌入式Linux应用程序开发课程大纲解析 #### 第一部分:嵌入式开发基础强化训练 本部分作为课程的入门阶段,旨在帮助学生建立起扎实的Linux基础与嵌入式开发技能,为后续深入学习奠定基石。 **1. Linux操作...

    嵌入式Linux-实验一.doc

    嵌入式Linux实验一主要目的是让学生掌握Linux操作系统中的一些基本命令和操作,这些技能对于日常的系统管理和开发工作至关重要。实验内容涵盖了从登录与退出系统,到文件和目录的管理,再到进程信息的查看,以及...

    嵌入式实习-day1-linux基本命令

    根据给定的实习日志,我们可以总结出一系列与Linux操作系统相关的基础知识点,这些知识点对于初学者来...通过这次实习经历,学生不仅掌握了Linux的基本命令,还巩固了C语言的基础知识,为后续的学习奠定了坚实的基础。

    arm&linux嵌入式系统教程第二版 课件全

    7. **应用程序开发**:在嵌入式Linux系统上,可以开发各种应用程序,如控制界面、数据处理等。课程会介绍C/C++编程和嵌入式编程实践。 8. **案例研究**:通过实际项目,学生将有机会将所学知识应用于实际产品设计,...

    c语言学生管理系统

    《C语言学生管理系统详解》 在编程领域,C语言以其高效、简洁的特性深受程序员喜爱,尤其在系统级编程和嵌入式开发中占据着重要地位。本篇将深入探讨一个基于C语言的学生管理系统,该系统在Linux环境下运行,并且...

    青岛科技大学-嵌入式应用开发-实验报告.zip

    首先,报告可能详细介绍了嵌入式Linux系统的构成,包括硬件平台、嵌入式Linux内核、文件系统以及用户空间应用程序。在硬件层面,可能涉及到微处理器的选择、内存管理以及I/O接口的设计。对于内核,学生可能会学习到...

    嵌入式下ucosii期末复习题库

    嵌入式系统的期末复习题库通常会包含历年试题、习题集和试卷,涵盖了ucOSII和Linux的基础概念、系统调用、编程模型以及实际应用。通过深入研究这些资料,学生可以全面了解ucOSII和Linux的运行机制,提升解决实际问题...

    linux下c语言sqlite学生成绩管理系统

    在Linux环境下,C语言结合SQLite和GTK+可以创建一个简单的学生成绩管理系统。这个系统适合初学者学习,有助于理解数据库操作、图形用户界面设计以及如何将两者整合。 首先,让我们详细了解一下涉及的关键技术: 1....

    linux系统下C语言实现带有图形界面的学生成绩管理系统源代码(包含数据库文件)

    在Linux系统中,使用C语言实现带有图形界面的学生成绩管理系统是一项常见的编程挑战,它涉及到多方面的技术知识点。下面将详细阐述这个项目所涵盖的关键技术及其应用。 1. **C语言编程**:C语言是系统级编程的基础...

    linux 嵌入式实习报告

    实习报告主要围绕Linux嵌入式系统的理解和实践,通过一系列的学习和任务,旨在让学生深入理解嵌入式系统的核心技术,包括ARM硬件体系结构、Linux操作系统、C语言编程、系统编程、处理器架构、驱动程序开发以及项目...

    linux下C语言写的学生管理系统源码

    在Linux环境下,使用C语言开发一个学生管理系统是一个经典的编程练习,它可以帮助初学者掌握C语言的基础以及文件操作、结构体、动态内存管理等高级概念。下面将详细解析这个项目涉及的知识点。 首先,C语言是计算机...

Global site tag (gtag.js) - Google Analytics