简单易学的学生信息表数据库代码 (数据库学生信息表代码)

随着互联网的普及,数据处理和管理成为了各个行业和领域的必备技能。而学生信息表作为一种常见的数据管理方式,被广泛应用于学校和教育机构。本文将为大家介绍一种。

一、创建数据库

我们需要在MySQL中创建一个数据库。打开MySQL命令行窗口,输入以下命令:

CREATE DATABASE student_info;

该命令将创建一个名为“student_info”的数据库。接下来,我们需要在该数据库中创建一张学生信息表。

二、创建学生信息表

在MySQL命令行窗口中输入以下命令,创建一个名为“student”的学生信息表:

USE student_info;

CREATE TABLE student (

id INT PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(20),

sex VARCHAR(10),

age INT,

department VARCHAR(40),

address VARCHAR(100)

);

该命令将创建一个包含学生id、姓名、性别、年龄、所在系别、家庭地址等字段的学生信息表。其中,“id”字段为主键,并使用自动增长模式。

三、插入数据

接下来,我们需要向该表中插入一些测试数据。在MySQL命令行窗口中输入以下命令:

INSERT INTO student (name, sex, age, department, address)

VALUES (‘张三’, ‘男’, 20, ‘计算机科学与技术系’, ‘北京市海淀区’);

INSERT INTO student (name, sex, age, department, address)

VALUES (‘李四’, ‘女’, 22, ‘英语系’, ‘上海市浦东新区’);

INSERT INTO student (name, sex, age, department, address)

VALUES (‘王五’, ‘男’, 21, ‘化学系’, ‘广州市天河区’);

INSERT INTO student (name, sex, age, department, address)

VALUES (‘赵六’, ‘女’, 23, ‘数学系’, ‘深圳市南山区’);

以上命令将向学生信息表中插入四条测试数据,分别为张三、李四、王五、赵六的信息。

四、查询数据

我们可以在MySQL命令行窗口中查询该表中的数据。输入以下命令:

SELECT * FROM student;

该命令将查询学生信息表中的所有数据,并返回类似于以下结果的输出:

+—-+——–+——+——+————————+———————+

| id | name | sex | age | department | address |

+—-+——–+——+——+————————+———————+

| 1 | 张三 | 男 | 20 | 计算机科学与技术系 | 北京市海淀区 |

| 2 | 李四 | 女 | 22 | 英语系 | 上海市浦东新区 |

| 3 | 王五 | 男 | 21 | 化学系 | 广州市天河区 |

| 4 | 赵六 | 女 | 23 | 数学系 | 深圳市南山区 |

+—-+——–+——+——+————————+———————+

以上就是一个。通过这些代码,我们可以创建一个学生信息表,并对其进行数据的插入和查询操作。希望本文对大家学习和应用MySQL有所帮助。

相关问题拓展阅读:

c语言学生信息管理系统代码

/*引用库函数*/

#include

#include

#include

/*定义结构体数组*/

typedef struct

{

char num; /*学号*/

char name; /*姓名*/

char sex; /*性别*/

int score; /扰绝*成绩*/

float avg; /*平均分*/

int sum; /*总成绩*/

}Student;

Student studentAll; /*结构体数组*/

int student_number = 0; /*总人数*/

/*菜单函数*/

int menu_select()

{

int check_number;

do{

system(“cls”); /*运行前清屏clear screen,在stdlib.h中*/

printf(“\t★☆☆☆☆☆☆学生成绩管理系统☆☆☆☆☆☆★\n”); /*菜单选择*/

printf(“\t★|. 添加学生信息|★\n”);

printf(“\t★|. 显示学生信息|★\n”);

printf(“\t★|. 按学号排序 |★\n”);

printf(“\t★|. 按总成绩排序|★\n”);

printf(“\t★|. 查找单个学生|★\n”);

printf(“\t★|. 删除指定学生|★\n”);

printf(“\t★|. 修改学生信息|★\n”);

printf(“\t★|. 查看各门课程的成绩情况 |★\n”);

printf(“\t★|. 待定功能 |★\n”);

printf(“\t★|. 保存退出 |★\n”);

printf(“\t★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★\n”);

printf(“请输入选择(0-9):”);

scanf(“%d”,&check_number); /*读入选择*/

}while(check_number9);

return(check_number); /*返回选择*/

}

//以下的student都碧李弯是形式参数,真正的数组悔闷是在全局变量里定义的studentAll数组

/*输入若干条记录*/

void Input(Student student)

{

int i=0,j;

char flag,clear;/*clear为清除多余的数据所用*/

char studentNum;//暂存某学生学号

//判断是否已经存在相同学生的学号

while(flag!=’n’&&flag!=’N’) //判断flag是不是n/N,以此判断是否继续输入学生信息

{

printf(“请输入学生学号: “);

scanf(“%s”,studentNum);

while(strcmp(student.num,studentNum)!=0&&i0)

{

student_sort=student;

student=student;

student=student_sort;

}

}

}

}

/*按总成绩排序*/

void Sort_by_sum(Student student)

{

Student student_sort;

int i,j;

for(i=0;istudent.sum)

{

student_sort=student;

student=student;

student=student_sort;

}

}

}

}

/*按姓名查找并显示一个记录*/

void Query_a_record(Student student)

{

int i,j;

char findname;//输入学生的姓名

scanf(“%s”,findname);

for(j=0;j

#include

#include

#include

#include

typedef struct examinee //考生信息结构

{   char examno; //准考证号

char name; //姓名

char sex; //性别

short age; //年龄

char examtype; //报考科目

}ElemType;

typedef struct Node //定义链表结点

{

ElemType data; //数据域

struct Node *next; //指针域

}Node,*List,*position;

List make_empty( List L ); //创建一个带头结点的空表

int is_empty( List L ); //测试链表是否是空表

int is_last( position p, List L ); //测试当前位置是否是表尾

position make_node( position p,int n ); //创建结点并输入考生信息

void put_information( position p ); //是否输出该考生信息

void put_name_information( List L ); //输出姓名为xx的考生信息

int put_pos_information( position p ); //输出该地址考生信息

void link_to_tail( List L, position p ); //将结点连接到表尾

int ciculation_make(); //循环创建考生信息

int judge_put_all(); //是否输出所有考生信息

void put_all(List L); //输出所有考生信息。

position find( List L ); //查找之一个姓名为xx的元素并返回位置

position find_previous( List L ); //查找之一个姓名为xx的元素并返回该元素直接前驱的位置

//int judge_delete_val(); //询问是否删除考生数据

int delete_val( List L ); //删除指定考生信息并输出其信息

void menu(List L); //菜单函数

List L;

//position p;

int

main( void ) 

{

List L = NULL; //定义头结点指针

position p = NULL; //定义表工作指针

L = make_empty( L ); //创建空表

printf(“\t\t\t★★考生报名管理程序★★\n\t\t\n”);

menu(L);

return 0;

}

//创建一个带头结点的空表

List

make_empty( List L)

{

L = ( List ) malloc (sizeof( Node ));

if(NULL == L)

{

printf(“内存分配失败”);

exit( 1 );

}

L->next = NULL;

//printf(“空表创建成功。\n”);

return L;

}

//创建结点并输入考生信息

position

make_node( position p ,int n)

{

if(n) //n为1是创建结点并输入,n为0是修改

{

p = ( position ) malloc ( sizeof ( Node ));

p->next = NULL ;

}

printf(“请输入考生准考证号:”);

gets(p->data.examno);

printf(“请输入考生姓名:”);

gets(p->data.name);

do

{

printf(“请输入考生性别,只能输入“男”或者“女”:”);

gets(p->data.sex);

}

while( 0 != strcmp( p->data.sex, “男” ) &&森氏 0 != strcmp( p->data.sex, “女” )); //判断性别是否有误此乎散

printf(“请输入考生年龄:”);

scanf(“%hd”,&p->data.age);

getchar();  //如果把这顷没句删掉,就“无法执行”下面的报考类别

/*下面的do while用来判断报考类别是否输入有误*/

do

{

printf(“请输入报考类别,只能输入“数学”或“英语”或者“数据结构”:”);

gets(p->data.examtype);

}

while( 0 != strcmp( “英语”, p->data.examtype ) && 0 != strcmp( “数学”, p->data.examtype ) && 0 != strcmp( “数据结构”, p->data.examtype ));

if(n)

{

printf(“报名成功\n”);

}

else

{

printf(“修改成功\n”);

}

return p;

}

//前插法;

void

link_to_tail( List L, position p)

{

p->next = L->next;

L->next = p;

}

//查找之一个姓名为xx的元素并返回位置

position

find( List L )

{

position p = L->next;

char name;

printf(“请输入你要查找的考生姓名:”);

gets(name);

while( p != NULL && 0 != strcmp( p->data.name , name))

{

p=p->next;

}

return p;

}

//测试链表是否是空表

int

is_empty( List L )

{

return L->next == NULL;

}

//测试当前位置是否是表尾

int

is_last( position p, List L )

{

return p->next == NULL;

}

//输出姓名为xx的考生信息

void

put_name_information( List L )

{

position p = find(L);

if(p!=NULL)

{

printf(“您要查找的考生信息:\n”);

printf(“准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n\n”,p->data.examno,p->data.name,p->data.sex,p->data.age,p->data.examtype);

}

else

{

printf(“没有您要找的学生。\n”);

}

}

//循环创建考生信息

int

ciculation_make()

{

int n = 2;

do

{

printf(“是否继续创建考生信息?是请输入“1”,不是请输入“0”:”);

scanf(“%d”,&n);

getchar();

}

while( n != 0 && n != 1);

return n;

}

//是否输出考生信息

void

put_information( position p )

{

int n=2;

do

{

printf(“是否输出该考生信息?是请输入“1”,不是请输入“0”:”);

scanf(“%d”,&n);

getchar();

}

while( n != 0 && n != 1);

if(n)

{

printf(“准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n”,p->data.examno,p->data.name,p->data.sex,p->data.age,p->data.examtype);

}

}

//是否输出所有考生信息

int

judge_put_all()

{

int n = 2;

do

{

printf(“是否输出所有考生信息?是请输入“1”,不是请输入“0”:”);

scanf(“%d”,&n);

getchar();

}

while( n != 0 && n != 1);

return n;

}

//输出所有考生信息

void

put_all(List L)

{

if(L->next == NULL)

{

printf(“现无考生报名!\n”);

}

else

{

position p=L->next;

while( p != NULL )

{

printf(“准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n”,p->data.examno,p->data.name,p->data.sex,p->data.age,p->data.examtype);

p=p->next;

}

}

//getchar();

}

//询问是否删除考生数据

int

judge_delete_val()

{

int n = 2;

do

{

printf(“是否要删除某个考生数据?是请输入“1”,不是输入“0”:”);

scanf(“%d”,&n);

getchar();

}

while( n != 0 && n != 1);

return n;

}

//查找之一个姓名为xx的元素并返回其直接前驱的位置

position

find_previous( List L )

{

position q = L;

position p = L->next;

char name;

printf(“请输入你要查找的考生姓名:”);

gets(name);

while( p != NULL && 0 != strcmp( p->data.name , name))

{

q=p;

p=p->next;

}

if( p != NULL )

{

return q;

}

else

return p;

}

//删除指定考生信息并输出其信息

int

delete_val(List L)

{

int n=2;

position q=NULL;

position p=find_previous( L ); //返回考生信息地址

if( NULL == p )

{

printf(“你要删除的考生不存在\n”);

return 0;

}

else

{

q = p->next;

p->next = q->next;

printf(“删除成功。\n删除的考生信息为:\n”);

printf(“准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n”,q->data.examno,q->data.name,q->data.sex,q->data.age,q->data.examtype);

free(q);

return 1;

}

}

//输出该地址考试信息

int

put_pos_information( position p )

{

if(p != NULL )

{

printf(“准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n\n”,p->data.examno,p->data.name,p->data.sex,p->data.age,p->data.examtype);

return 1;

}

else

{

printf(“没有您要查找的学生。”);

return 0;

}

}

//菜单函数

void

menu(List L)

{

printf(“\t\t\t   a. 考生报名入口\n”);

printf(“\t\t\t   b. 查询考生信息\n”);

printf(“\t\t\t   c. 修改考生信息\n”);

printf(“\t\t\t   d. 删除考生信息\n”);

printf(“\t\t\t   e. 全部考生信息\n”);

printf(“\t\t\t   f. 程序作者信息\n”);

printf(“\t\t\t   g.   退出程序\n”);

char n=’h’;

while(n != ‘g’)

{

do  //确定正确输入

{

printf(“请通过字母序号选择功能:”);

n = getchar();

getchar();

putchar(‘\n’);

if( n ‘g’)

{

printf(“错误的字母序号。\n”);

}

}

while( n ‘g’ );

switch (n)

{

case ‘a’:

{

printf(“请输入报名考生信息:\n”);

position p = make_node( p, 1 ); //创建新结点

link_to_tail( L, p ); //将新结点连接到表上

put_information( p );   //是否输出该考生信息

putchar(‘\n’);

}

break;

case ‘b’:

{

put_name_information( L );

putchar(‘\n’);

}

break;

case ‘c’:

{

int n=0;

position p = NULL;

printf(“您正在进行修改操作。\n”);

p = find(L);

n = put_pos_information( p );

if(n)

{

make_node( p , 0 );

put_information( p );   //是否输出该考生信息

}

putchar(‘\n’);

}

break;

case ‘d’:

{

printf(“您正在进行删除操作。\n”);

delete_val( L );

putchar(‘\n’);

}

break;

case ‘e’:

{

put_all( L );

putchar(‘\n’);

}

break;

case ‘f’:

{

printf(“修改日期    版本号      修改人      修改内容    \n”);

printf(“\n”);

printf(“2023.6.19    v2.陈百川     增加主菜单\n”);

printf(“2023.6.23    v3.陈百川   增加生成文件功能\n\n”);

printf(“该版本号为v2.0\n”);

putchar(‘\n’);

}

break;

default:

break;

}

}

printf(“感谢本次使用,祝您生活愉快。”);

getch();

}

扩展资料:

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 目前2023年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。

其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

参考资料:

百度百科——C语言

#include

#include

#include

void frist_print()

{

printf(“\t\t********************************\n\n”);//冲拍键欢迎信息

printf(“\t\t\t欢迎进入学生成绩系统\n”);

}

void menu()

{

printf(“\n\t\t********************************\n”);/贺或/管理菜单

printf(“\t\t==\t1.录入学生成绩\n\t\t+\n”);

printf(“\t\t==\t2.显示学生成绩\n\t\t+\n”);

printf(“\t\t==\t3.查询学生成绩\n\t\t+\n”);

printf(“\t\t==\t4.添加学生成绩\n\t\t+\n”);

printf(“\t\t==\t5.修改学生成绩\n\t\t+\n”);

printf(“\t\t==\t6.删除学生成绩\n\t\t+\n”);

printf(“\t\t==\t7.清空页面\n\t\t+\n”);

printf(“\t\t==\t8.退出系统\n”);

printf(“\t\t********************************\n”);

printf(“please choise 1–8:\t”);

putchar(10);

}

struct MM// 结构体定义变量

{

char num;

char name;

float pay;

int many;

}mm;

void scanf_1()//之一次输入信息并保存在文件中

{

char ch;

FILE *fp;

if((fp=fopen(“dd.dat”,”wb+”))==NULL)

{

printf(“cannot open file\n”);

exit(0);

}

do

{

printf(“散巧请输入成绩的–编号:\t”);

getchar();

gets(mm.num);

printf(“姓名:\t”);

gets(mm.name);

printf(“成绩:\t”);

scanf(“%f”,&mm.pay);

printf(“学号:\t”);

scanf(“%d”,&mm.many);

if(fwrite(&mm,sizeof(struct MM),1,fp)!=1)

{

printf(“file write error\n”);

exit(0);

}

printf(“是否继续输入y or n ?\t”);

getchar();

ch=getchar();

}while(ch==’y’||ch==’Y’);

fclose(fp);

}

void find() //查询成绩的信息

{ int a,b=0;

char ch;

FILE *fp;

if((fp=fopen(“dd.dat”,”rb”))==NULL)

{

printf(“cannot open file\n”);

exit(0);

}

printf(“请输入要查询的成绩的方式\n\t1.编号 2.姓名:\n\t请选择 1 or 2 \t”);

scanf(“%d”,&a);

if(a==1)

{ getchar();

printf(“请输入成绩的编号:\t”);

gets(ch);

while(fread(&mm,sizeof(struct MM),1,fp)==1)

if(strcmp(mm.num,ch)==0)

{

b++;

printf(“编号\t姓名\t价格\t\t学号\n”);

printf(“%s\t%s\t%.3f\t\t%d\n”,mm.num,mm.name,mm.pay,mm.many);

}

if(b==0) printf(“对不起!没有找到相关信息:\n”);

}

else if(a==2)

{printf(“请输入成绩的姓名:\t”);

getchar();

gets(ch);

while(fread(&mm,sizeof(struct MM),1,fp)==1)

if(strcmp(mm.name,ch)==0)

{

b++;

printf(“编号\t姓名\t价格\t\t学号\n”);

printf(“%s\t%s\t%.3f\t\t%d\n”,mm.num,mm.name,mm.pay,mm.many);

}

if(b==0) printf(“input error!\n”);

}

fclose(fp);

}

void scanf_2()//第二次输入信息并保存在文件中

{

char ch;

FILE *fp;

if((fp=fopen(“dd.dat”,”ab”))==NULL)

{

printf(“cannot open file\n”);

exit(0);

}

do

{

printf(“请输入要添加成绩的–编号:\t”);

getchar();

gets(mm.num);

printf(“姓名:\t”);

gets(mm.name);

printf(“价格:\t”);

scanf(“%f”,&mm.pay);

printf(“学号:\t”);

scanf(“%d”,&mm.many);

if(fwrite(&mm,sizeof(struct MM),1,fp)!=1)

{

printf(“file write error\n”);

exit(0);

}

printf(“是否继续输入y or n ?\t”);

getchar();

ch=getchar();

}while(ch==’y’||ch==’Y’);

fclose(fp);

}

void print()//输出文档中的信息

{

FILE *fp;

if((fp=fopen(“dd.dat”,”rb”))==NULL)

{

printf(“cannot open file\n”);

return ;

}

printf(“编号\t姓名\t价格\t\t学号\n”);

while(fread(&mm,sizeof(struct MM),1,fp)==1)

printf(“%s\t%s\t%.3f\t\t%d\n”,mm.num,mm.name,mm.pay,mm.many);

fclose(fp);

}

void change()

{//修改信息的函数,定义另一个文件,把要修改的信息放到该文件中

struct XX//然后把其余的信息复制到该文件中;并把该文件从新命名为原来的名

{//把原来的文件移除;

char num;

char name;

float pay;

int many;

}xx;

FILE *fp2;

int a,b=0,c=0,n=0;

char ch,ck;

FILE *fp;

do{

if((fp=fopen(“dd.dat”,”rb”))==NULL)

{

printf(“cannot open file\n”);

exit(0);

}

if((fp2=fopen(“temp.dat”,”wb”))==NULL)

{

printf(“cannot open file\n”);

exit(0);

}

printf(“请输入要修改成绩的编号:\t”);

scanf(“%s”,ch);

n++;

while(fread(&mm,sizeof(struct MM),1,fp)==1)

{

if((strcmp(mm.num,ch)==0))

{

b++; //b的值如果一直没有改变说明,没有找到相关的信息;

printf(“编号\t姓名\t价格\t\t学号\n”);

printf(“%s\t%s\t%.3f\t\t%d\n”,mm.num,mm.name,mm.pay,mm.many);

getchar();

printf(“请输入成绩的新编号:\t”);

gets(xx.num);

printf(“请输入成绩的新姓名:\t”);

gets(xx.name);

printf(“请输入成绩的新价格:\t”);

scanf(“%f”,&xx.pay);

printf(“请输入成绩新学号:\t”);

scanf(“%d”,&xx.many);

getchar();

fwrite(&xx,sizeof(struct XX),1,fp2);

}

if(strcmp(mm.num,ch)!=0)

fwrite(&mm,sizeof(struct MM),1,fp2);

}

if(b==0)

{

printf(“\t没有找到相关信息!\n”);

getchar();

}

rewind(fp);//如果要继续修改的话,要把标记返回到文件的开头;

printf(“是否继续修改?enter ‘y’ or ‘n’ \t”);

ck=getchar();

fclose(fp);

fclose(fp2);

remove(“dd.dat”);

rename(“temp.dat”,”dd.dat”);

}while(ck==’y’||ck==’Y’);

if(b!=0)//如果没有找到相关信息就不能输出

printf(“\t修改成功:\n”);

}

void del()

{//删除函数和修改很相似

FILE *fp2;

int a,b=0,c=0,n=0;

char ch,ck;

FILE *fp;

do {

if((fp=fopen(“dd.dat”,”rb”))==NULL)

{

printf(“cannot open file\n”);

exit(0);

}

if((fp2=fopen(“temp.dat”,”wb”))==NULL)

{

printf(“cannot open file\n”);

exit(0);

}

printf(“请输入要删除成绩的编号:\t”);

scanf(“%s”,ch);

n++;

while(fread(&mm,sizeof(struct MM),1,fp)==1)

{

if((strcmp(mm.num,ch)==0))

{

b++; //b的值如果一直没有改变说明,没有找到相关的信息;

printf(“编号\t姓名\t价格\t\t学号\n”);

printf(“%s\t%s\t%.3f\t\t%d\n”,mm.num,mm.name,mm.pay,mm.many);

}

else if(strcmp(mm.num,ch)!=0)

fwrite(&mm,sizeof(struct MM),1,fp2);

}

if(b==0)

{

printf(“\t没有找到相关信息!\n”);

getchar();

}

rewind(fp);

getchar();

getchar();

printf(“删除成功!”);

getchar(); //如果要继续修改的话,要把标记返回到文件的开头;

printf(“是否继续删除?enter ‘y’ or ‘n’ \t”);

ck=getchar();

fclose(fp);

fclose(fp2);

remove(“dd.dat”);

rename(“temp.dat”,”dd.dat”);

}while(ck==’y’||ck==’Y’);

if(b!=0)//如果没有找到相关信息就不能输出

printf(“\t保存成功:\n”);

}

void myexit()

{

int a;

char ch;

printf(“\t是否确定退出?请选择 y or n: “);

getchar();

ch=getchar();

if(ch==’y’||ch==’Y’) exit(0);

else

menu();

}

int main()

{

int a;

frist_print();

menu();

while(1)

{

scanf(“%d”,&a);

if(a==1)

scanf_1();

else if(a==2)

print();

else if(a==3)

find();

else if(a==4)

scanf_2();

else if(a==5)

change();

else if(a==6)

del();

else if(a==7)

system(“cls”);

else if(a==8)

myexit();

else printf(“输入错误!!!请重新输入:\t”);

printf(“\t按任意键继续!\n”);

getch();

menu();

}

getch();

}

一个成绩管理系统,注释不是太多,写的不太好,能运行,符合你初级水平。

满意请采纳。

这是成绩管理系统

一.需求分析

用动态链表储管理姓名、、住址、身份证等信息和具备添加、删除等编辑功能

可以通过身份证号码识别性别,省份,年龄

可以统计总人数,男生人数,女生人数,同一年龄段人数

可以通过姓名,身份证号查询与修改数据

具备较美观的界面与汉字提示

具备保存信息羡穗至文件,及从文件中读取信息的功能

用动态链表来储存数据,便于管理

二.概要设计

流程图

添加信息

声明一个结构体来储存数据,并通过声明指针来动态添加信息

显示信息

声明一个结构体指针,让指针等于头指针,并遍历所有节点,打印每个节点的信息

查询信息

1.获取用户的选择确定 用姓名查找或是身份证号查找

2.遍历所有节点,找到与用户输入相和的节点

3.打印该节点的信息

修改信息

1.获取用户的选择确定 用姓名查找或是用身份证号查找并修改

2.遍历所有节点,找到与用户输入相和的节点

3.开始修改该节点的姓名,身份证号,手机号

删除信息

1.获取用户的选择确定 用姓名查找并删除或是用身份证号查找并删除,及全部删除

2.遍历所有节点,找到与用户输入相和的节点的上一个节点的地址

3.将这个节点的next储存为下下个节点的地址

4.删除中间的节点

数据分析

1.遍历所有节点

2.依次辨别性别,年龄段

3.在储存总人数,男生人数,女生人数,年龄段的数据上添加人数

保存信息至文件

1.遍历每个数塌节点

2.将每个节点的信息储存到文件中

3.每储存一个count便加一

4.打印储存数据的个数

从文件中读取数据

1.将文件中的数据依次添加到新的节点上

退出程序

将菜单的while(running)循环,running=0

三.详细设计

信息添加

struct IdCard

{

char num;

char phone;

int sex;

char city;

char name;

long age;

struct IdCard *next;

};

struct IdCard *head=NULL;//声明一个头节点作为全局变量,且使他为空

动态生成节点,并往节点中添加信息,生成动态链表

while(strcmp(pid1->num,str)!=0){

n++;

if(n==1) head=pid1;

else pid2->next=pid1;

pid2=pid1;

pid1=(struct IdCard*)malloc(sizeof(struct IdCard));

printf(“请输入身份证号(按0退出):”);

char str=”0″;//用来辨别

scanf(“%s”,pid1->num);

if(strcmp(pid1->num,str)==0) break;

在此处通过身份证号计算相应的年龄,性别,将这些信息添加到该节点上。

效果图如下

菜单样式

通过printf打印选项兄毕卜

在while中循环,使菜单一直刷新存在

在while中的最后加system(“pause”)使每个键盘信息能被显示出来

效果图如下:

显示信息

struct IdCard *pid;//遍历节点

pid=head;

通过遍历节点打印出所有节点的信息

效果图如下:

查询信息

int num;

printf(“按1,身份证号查询\n按2,姓名查询:\n”);

获取用户的选择

声明字符串变量来储存用户输入的姓名或身份证号

遍历所有节点,找到与用户相符合的那个节点,并打印

struct IdCard *pid;

pid=head;

while(pid){

if(strcmp(pid->num,num)==0){

printf(“–显示所有信息\n”); 

printf(“身份证号姓名性别省份手机号      年龄\n”);

printf(“%18s “,pid->num);

printf(“%-16s”,pid->name);

printf(“%-13s”,pid->sex==1?”男”:”女”);

printf(“%-14s”,pid->city);

printf(“%11s”,pid->phone);

printf(”  %d\n”,pid->age);

printf(“\n”);

}

pid=pid->next;

}

效果图如下:

修改信息

获取用户的选择

ystem(“cls”);

char name;

printf(“请输入要修改的名字(20个字节):\n”);

while(1!=scanf(“%s”,name)){

printf(“你的输入有误,请重新输入(20个字节):”);

fflush(stdin);

选择相应的修改方式

遍历节点选到与用户输入相符的节点,并修改

struct IdCard *pid,*ptmp;

pid=head;

while(pid){

if(strcmp(pid->name,name)==0){

printf(“请输入你要重写的身份证号:\n”);

while(1!=scanf(“%s”,pid->num)||strlen(pid->num)!=18){

printf(“你的输入有误,请重新输入(18位):”);

fflush(stdin);

}

效果图如下:

保存信息至文件

以只写的二进制方式打开一个文件

FILE *pf = fopen(“FILENAME”, “wb”);

遍历节点

struct IdCard *pid = head;  

if(!pf)  

{

printf(“打开待写入的文件失败!\n”);  

return;  

}  

while(pid)  

fwrite(pid, 1, sizeof(struct IdCard), pf);//把每位学生信息写入文件  

i++;  

pid = pid->next;  

}  

fclose(pf); 

printf(“\t\t\t成功写入%d信息”,i);  

将每个节点写入文件中,用frwite函数

声明一个变量来计算写入的信息数

效果图如下:

从文件中读取信息

以只读的二进制方式打开文件夹

FILE *pf;  

struct IdCard *pid;  

if((pf = fopen(“FILENAME”, “rb”)) == NULL)  

{  

printf(“文件还没有创建,请手工输入学生信息并保存吧!\n”);  

return;  

}  

申请新的空间将地址赋给节点

struct IdCard *pid1,*pid2;

pid1=pid2=(struct IdCard*)malloc(sizeof(struct IdCard));

fread(pid1,1,sizeof(struct IdCard),pf);

while(!feof(pf)){

i++;

if(head==NULL){

head=pid1;

}else{

pid2->next=pid1;

}

pid2=pid1;

pid1 = (struct IdCard*)malloc(sizeof(struct IdCard));

fread(pid1,1, sizeof(struct IdCard), pf);  

fclose(pf);  

printf(“文件读取完毕!新增学生信息%d条。\n”,i);

将文件信息写入节点中

将节点添加进动态链表中

声明一个变量来记录读出信息数量

效果图如下:

数据分析

遍历每个节点

int ManCount=0,

WomanCount=0,

age1Count=0,

age2Count=0,

count=0;

struct IdCard *pi;

pi=head;

while(pi){

count++;

if(pi->sex==1){

ManCount++;

}else{

WomanCount++;

}

if(pi->age>10&&pi->ageage>20&&pi->agenext;

}

printf(“\n”);

printf(“总共有%d个身份证\n男的占%d个\n女的占%d个\n年龄段在10到20岁之间的有%d个\n年龄段在20到40岁之间的有%d个\n”,count,ManCount,WomanCount,age1Count,age2Count);

辨别每个节点的性别,年龄段

在相应的变量上加减

于是统计出了总信息数量,男生数量,女生数量,各年龄段数量

效果图如下:

四.测试结果

程序开始运行

回车键后显示菜单

添加信息

当身份证号输入的位数不够18位时,会报错,当手机号不够11位时,会报错重新输入

查询信息

删除一个信息

删除所有信息

修改信息

保存信息至文件

从文件中读取信息

显示所有信息

数据分析

五.用户使用说明

信息添加:

可以输入相应的身证号,名字与手机号。当身份证号与手机号的位数输入错误时,会有相应的提示,此时你可以重新输入。在输入信息结束时,可以按0

保存信息至文件

如果想要在下一次打开此程序时,还能看到相应的信息,一定要记得保存信息至文件,但此次保存文件会覆盖上一次的信息

从文件中读取信息

从文件中读取的信息会添加到你新写的信息后面,当显示所有信息时,会以链表形式逐个打印出来

查询信息

当你输入的信息查找不到时,此时不会打印任何信息,可按任意键回到菜单。

同样输入手机号和身份证号会检查你的位数对不对,不对的话,将提示你重新输入

修改信息

当你输入相应的身份证号或名字时,会让你把这个人的信息全部输入一次

删除所有信息

该选项将会删除你所有的信息,谨慎!

删除一个信息

可以选择你想删除的身份证号或名字,删除掉其中一个信息,不会影响其他信息

数据分析

会统计出总信息数量,男生数量,女生数量,各年龄段数量

退出程序

按0会退出程序,此次使用身份证信息管理系统结束

Hu徊 c语言课程设计

(高分)急求连接数据库的JAVA学生信息管理系统源代码

数据库连接(Connection)者首

数据库连接

获取数据库连接有两种方法,一种是通过驱动程序管理器DriverManager类,另一种则是使用DataSource接口。这两种方法都提供了了一个getConnection方法,用户可以在程序中对它们进行相应处理后调用这个方猜山法来返回数据库连接。

• DriverManager类

• DataSource接口

• Connection接口

• JDBC URL

jdbc::

•穗嫌中 驱动程序注册方法

(1)调用Class.forName方法

(2)设置jdbc.drivers系统属性

• DriverManager方法

DriverManager类中的所有方法都是静态方法,所以使用DriverManager类的方法时,不必生成实例。

DriverManager

• getConnection方法

作用是用于获取数据库连接,原型如下:

public static Connection getConnection(String url)

throws SQLException;

public static Connection getConnection(String url, String user, String password)

throws SQLException;

public static Connection getConnection(String url, Properties info)

throws SQLException;

• 使用DriverManager的getConnetion方法

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

Connection conn = DriverManager.getConnection

(“jdbc:odbc:sqlserver”, “sa”, “sa”);

• 使用设置jdbc.drivers系统属性的方法

java -Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver test.java

DataSource 接口

……

//从上下文中查找数据源,并获取数据库连接

Context ctx = new InitialContext();

DataSource ds = (DataSource) ctx.lookup(“sqlserver”);

Connection conn = ds.getConnection();

//查询数据库中所有记录

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(“SELECT * FROM student”);

……

Connection 接口

Connection接口代表了已经建立的数据库连接,它是整个JDBC的核心内容。Connnection接口中的方法按照它们所实现的功能,可以分为三类:

• 生成数据库语句

• 管理数据库事务

• 获取数据库信息

生成数据库语句

JDBC将数据库语句分成三种类型 :

• 生成Statement 语句 :

Connection.createStatement()

• 生成PreparedStatement 语句 :

Connection. prepareStatement()

• 生成CallableStatement 语句 :

Connection. prepareCall ()

管理数据库事务

• 默认情况下,JDBC将一条数据库语句视为一个完整的事务。可以关掉默认事务管理:

public void setAutoCommit(Boolean autoCommit) throws SQLException;

将autoCommit的值设置为false,就关掉了自动事务管理模式

• 在执行完事务后,应提交事务:

public void commit() throws SQLException;

• 可以取消事务:

public void rollback() throws SQLException;

第二讲 第四部分

数据库语句

数据库语句

JDBC数据库语句共有三种类型:

• Statement:

Statement语句主要用于嵌入一般的SQL语句,包括查询、更新、插入和删除等等。

• PreparedStatement:

PreparedStatement语句称为准备语句,它是将SQL语句中的某些参数暂不指定,而等到执行时在统一指定。

• CallableStatement:

CallableStatement用于执行数据库的存储过程。

Statement 语句

• executeQuery方法

• executeUpdate方法

• execute方法

• close方法

executeQuery方法

• executeQuery方法主要用于执行产生单个结果集的SQL查询语句(QL),即SELECT语句。executeQuery方法的原型如下所示:

• public ResultSet executeQuery(String sql) throws SQLException;

executeUpdate方法

• executeUpdate方法主要用于执行 INSERT、UPDATE、DELETE语句,即SQL的数据操作语句(DML)

• executeUpdate方法也可以执行类似于CREATE TABLE和DROP TABLE语句的SQL数据定义语言(DDL)语句

• executeUpdate方法的返回值是一个整数,指示受影响的行数(即更新计数)。而对于CREATE TABLE 或 DROP TABLE等并不操作特定行的语句,executeUpdate的返回值总为零。

execute方法

execute方法用于执行:

• 返回多个结果集

• 多个更新计数

• 或二者组合的语句

execute方法

• 返回多个结果集:首先要调用getResultSet方法获得之一个结果集,然后调用适当的getter方法获取其中的值。要获得第二个结果集,需要先调用getMoreResults方法,然后再调用getResultSet方法。

• 返回多个更新计数:首先要调用getUpdateCount方法获得之一更新计数。然后调用getMoreResults,并再次调用getUpdateCount获得后面的更新计数。

• 不知道返回内容:如果结果是ResultSet对象,则execute方法返回true;如果结果是int类型,则意味着结果是更新计数或执行的语句是DDL命令。

execute方法

为了说明如果处理execute方法返回的结果,下面举一个代码例子:

stmt.execute(query);

while (true) {

int row = stmt.getUpdateCount();

//如果是更新计数

if (row > 0) {

System.out.println(“更新的行数是:” + row);

stmt.getMoreResults();

continue;

}

execute方法

//如果是DDL命令或0个更新

if (row == 0) {

System.out.println(“没有更新,或SQL语句是一条DDL语句!”);

stmt.getMoreResults();

continue;

}

//如果是一个结果集

ResultSet rs = stmt.getResultSet;

if (rs != null) {

while (rs.next()) {

// 处理结果集

. . .

}

stmt.getMoreResults();

continue;

}

break;

}

PreparedStatement 语句

登录一个网站或BBS时 :

• 使用Statement语句

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery

(“SELECT password FROM userinfo

WHERE id=userId”);

• 使用PreparedStatement语句

PreparedStatement pstmt=conn.prepareStatement

(“SELECT password FROM userinfo

WHERE id=?”);

pstmt.setString(1, userId);

PreparedStatement语句

• 常用的setter方法

public void setBoolean(int parameterIndex, boolean x) throws SQLException;

public void setByte(int parameterIndex, byte x) throws SQLException;

public void setShort(int parameterIndex, short x) throws SQLException;

public void setInt(int parameterIndex,int x) throws SQLException;

public void setLong(int parameterIndex, long x) throws SQLException;

public void setFloat(int parameterIndex, float x) throws SQLException;

public void setDouble(int parameterIndex, double x) throws SQLException;

public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException;

public void setString(int parameterIndex, String x) throws SQLException;

public void setBytes(int parameterIndex, byte x) throws SQLException;

public void setDate(int parameterIndex, Date x) throws SQLException;

public void setTime(int parameterIndex, Time x) hrows SQLException;

public void setTimestamp(int parameterIndex, Timestamp x) throws SQLException;

PreparedStatement语句

• PreparedStatement接口是由Statement接口扩展而来的,重写了executeQuery方法、executeUpdate方法和execute 方法

• public ResultSet executeQuery() throws SQLException

• public int executeUpdate() throws SQLException

• public boolean execute() throws SQLException

CallableStatement语句

• CallableStatement语句是由Connection接口的prepareCall方法创建的,创建时需要传入字符串参数,参数的形式为:

• {call procedure_name}

• {? = call procedure_name}

• {call procedure_name}

CallableStatement语句

• 其中的问号是参数占位符,参数共有两种:

• IN参数

• OUT参数

• IN参数使用setter方法来设置

• OUT参数则使用registerOutParameter方法来设置

CallableStatement 语句

CallableStatement cstmt = con.prepareCall

(“{call getTestData(?, ?)}”);

cstmt.registerOutParameter

(1, java.sql.Types.TINYINT);

cstmt.registerOutParameter

(2, java.sql.Types.DECIMAL, 3);

cstmt.executeQuery();

byte x = cstmt.getByte(1);

java.math.BigDecimal n =

cstmt.getBigDecimal(2, 3);

第二讲 第五部分

结 果 集

结果集

• JDBC为了方便处理查询结果,又专门定义了一个接口,这个接口就是ResultSet接口。ResultSet接口提供了可以访问数据库查询结果的方法,通常称这个接口所指向的对象为结果集。

• 有两种方法得到结果集,一种是直接执行查询语句,将结果存储在结果集对象上;另一种是不存储返回结果,而在需要时调用数据库语句的getResultSet方法来返回结果集

结果集

• 结果集指针

由于返回的结果集可能包含多条数据记录,因此ResultSet 接口提供了对结果集的所有数据记录轮询的方法。结果集自动维护了一个指向当前数据记录的指针,初始时这个指针是指向之一行的前一个位置。 next 方法就是用于向前移动指针的

结果集

• 结果集属性

默认情况下,结果集是一个不可更新集,并且结果集的指针也只能向前移动。也就是说,在得到了一个结果集之后,用户只能按照从之一条记录到最后一条记录的顺序依次向后读取,而不能跳到任意条记录上,也不能返回到前面的记录。不仅如此,结果集的这种轮询只能进行一次,而不能再将指针重置到初始位置进行多次轮询

结果集

• 结果集属性

类型

并发性

有效性

• 属性的设置是在生成数据库语句时通过向生成方法传入相应的参数设定的,而当结果集已经返回时就不能够再改变它的属性了。

结果集生成Statement语句共有三种方法

public Statement createStatement() throws SQLException;

public Statement createStatement

(int resultSetType, int resultSetConcurrency)

throws SQLException;

public Statement createStatement

(int resultSetType, int resultSetConcurrency,

int resultSetHoldability)

throws SQLException;

结果集

• 生成PreparedStatement语句共有六种方法

public PreparedStatement prepareStatement(String sql) throws SQLException;

public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)

throws SQLException;

public PreparedStatement prepareStatement(String sql, int columnIndexes)

throws SQLException;

public PreparedStatement prepareStatement(String sql, int resultSetType,

int resultSetConcurrency)

throws SQLException;

public PreparedStatement prepareStatement(String sql, int resultSetType,

int resultSetConcurrency,

int resultSetHoldability)

throws SQLException;

public PreparedStatement prepareStatement(String sql. String columnNames)

throws SQLException;

结果集

• 生成CallableStatement语句共有三种方法

public CallableStatement prepareCall(String sql)

throws SQLException;

public CallableStatement prepareCall

(String sql, int resultSetType,

int resultSetConcurrency)

throws SQLException;

public CallableStatement prepareCall

(String sql, int resultSetType,

int resultSetConcurrency,

int resultSetHoldability)

throws SQLException;

结果集

结果集类型

• 结果集的类型共有三种,TYPE_FORWARD_ON类型的结果集只能向前移动指针,而TYPE_SCROLL_INSENSITIVE类型和TYPE_SCROLL_SENSITIVE类型的结果集则可以任意移动指针。后两种类型的区别在于,前者对来自其它处的修改不敏感(静态),而后者则对于别人的修改敏感(动态视图)。

结果集

结果集类型

• 对于可以任意移动指针的结果集,可以用来移动指针的方法包括:

• next 和previous :

• absolute 和relative :参数可正可负

• afterLast 、beforeFirst 、last 和first :

结果集

结果集并发性

• 结果集的并发性共有两种,CONCUR_READ_ON的结果集是只读而不可更新的;而CONCUR_UPDATABLE的结果集则是可以通过update方法进行更新的。

• ResultSet接口提供了一组update方法,用于更新结果集中的数据。这些方法与PreparedStatement接口中定义的setter方法一样,也是与类型相对应的。所有的update方法都以update开头 。

• 所有的update方法都有两个参数,之一个参数用于指定更新的列,它可以是列名称也可以是列的序号;第二个参数则表示将要更新列的值。

结果集

结果集并发性

• Statement stmt = conn.createStatement

•(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

•ResultSet rs = stmt.executeQuery(“SELECT * FROM student ” +

•”WHERE grade=2 AND math>60 AND physics>60 AND ” +

•”chemistry>60 AND english>60 AND chinese>60″);

•while(rs.next()){

•rs.updateString(“grade”, “3”);

•rs.updateRow();

•}

结果集

结果集有效性

• 结果集的有效性是指在调用了Connection 接口的commit 方法后,结果集是否自动关闭。所以它只有两个可选值,即HOLD_CURSORS_OVER_COMMIT 和CLOSE_CURSORS_AT_COMMIT 。前者表示调用commit 方法之后,结果集不关闭;而后者则表示关闭结果集。

结果结果集

• 结果集的getter方法

ResultSet接口还提供了一组getter方法,用于返回当前记录的属性值。它们都是以get开头的,后接数据类型。比如,如果要返回一个float类型的列值,则应调用getFloat方法。每一种类型的getter方法都有两种形式,它们的名称相同而参数不同。这两种形式的getter方法都只有一个参数,之一种形式的getter方法参数是String类型的,用于指定列的名称;另外一种形式的getter方法参数则是int类型的,用于指定列的序号。

你要连的数据库是SQL 还是ORACLE

但是代码都查不多

下面的是连接SQL数据库的代码

你需要先创建个数据库,还有表,表的字段是登陆名和密码

下面的”SA” 是登陆名 “111111” 是密码

ORACLE 和这个查不多

import java.sql.*;//做数据库时候必须要引入的包

import com.microsoft.jdbc.sqlserver.SQLServerDriver;

public class DBFactory {

Connection Conn=null;

PreparedStatement Stmt=null;

ResultSet Rs=null;

String driverName=”com.microsoft.jdbc.sqlserver.SQLServerDriver”;

String OracleUserName=”sa”;

String OracleUserPwd=”111111″;

String ConnUrl=”jdbc:

public Connection getConnection()

{

try {

Class.forName(driverName);

} catch (ClassNotFoundException ex) {

System.out.println(“加载驱动程序有错误”);

}

try {

Conn = DriverManager.getConnection(ConnUrl, OracleUserName,OracleUserPwd);

} catch (SQLException ex1) {

System.out.print(“取得仿陆连接的时候有错误,请核对用户名和密码”);

}

return Conn;

}

这个是连接ORACLE数据库代码

import java.sql.*;

import oracle.jdbc.driver.OracleDriver;

public class DBFactory {

Connection Conn=null;

PreparedStatement Stmt=null;

ResultSet Rs=null;

String driverName=”oracle.jdbc.driver.OracleDriver”;

String OracleUserName=”scott”;

String OracleUserPwd=”tiger”;

String ConnUr1=”jdbc:oracle:thin:@locahost:1521:Ora”;

public Connection getConnection()

{

try {

Class.forName(driverName);

} catch (ClassNotFoundException ex) {

System.out.println(“加载驱动程序有错误”);

}

try {

Conn = DriverManager.getConnection(ConnUr1, OracleUserName,OracleUserPwd);

} catch (SQLException ex1) {

System.out.print(“取得连接时有错误,备启顷旁核请核对用户名和密码”);

}

return Conn;

}

希望能追加分数谢谢!

SQL数据库中查询所学课程包含学生Q所学课程的学生学号的代码

按照一般此类练习题的思路,你这题祥渣薯应该梁纳是两表连查student表谨者,score表

select a.sno

from student as a

left join score as b on a.sno=b.sno

where b.cno in (select cno from score where sno=’Q0401′)

1 。 EXISTS 子查询找到的提交NOT EXISTS 子查询中 找不到的提交说明差兄:不要去翻译为好逗存在和不存在,把脑袋搞晕。

2 。 建立程序循环的概念,这是一个动态的查询过程。如 FOR循环 。

3 。 Exists执行的流程Exists首先执行外层查询,再执行内存查询,与IN相反。 流程为首先取出外层中的之一

元组

, 再执行内层查询,将外层表的之一元组代入,若内层查询为真,即有结果时。返回外层表中的之一元 组,接着取出第二元组,执行相同的算法。一直到扫描完外层整虚袜袭表 。

select * from S表,c 表, sc 表where 学生=Q0401

首先 我需要知道 您有什么表,表接口又是什么,才能出 sql语句

关于数据库学生信息表代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 简单易学的学生信息表数据库代码 (数据库学生信息表代码)