作业要求

1.只能使用C语言,源程序要有适当的注释,使程序容易阅读,所有程序要求使用多文件多函数编程方式。
2.要有用户界面。要求至少采用文本菜单界面;使用文件保存数据,鼓励自行增加新功能。
3.写课程设计报告

题目:一卡通消费记录管理系统
一、 功能需求说明(必须采用结构体和动态链表实现)
1. 消费记录存在文件fee.txt中,格式如下:
每一条记录包括一个消费的交易日期、入账日期、交易额、交易后余额、交易类型、交易次数、交易地点。示例如下

2.查询搜索功能

(1)用户能够查询自己的一卡通固定时段消费情况:可以按月、学期、学年查询
(2) 用户可以自定义一个时间段进行查询自己的消费情况

(3)用户可以按交易金额查找消费记录
(4)管理员可查询任一用户的消费记录,可按照固定时段、自定义时段、金额方式、已删除记录查询
3.排序功能:按消费记录的交易日期、金额、次数中一个进行(升序或降序)排序。
4.数据录入:管理员能录入某个用户的一卡通消费情况,可以一次完成若干条记录的输入。
5.显示功能:可进行全部消费记录的显示,也可按照查询结果进行显示
6.数据变更:管理员可以更改或删除用户的某条消费记录,但删除的信息要保存在另外一个文件fee_undel.dat
7.统计功能:(1)用户可统计自己在一个自定义时间段里的消费总金额情况
(2)管理员可统计各个用户在一个自定义时间段里的消费总金额情况
8. 用户和管理员的权限要分开。
二、加分项
1.使用图形界面。
2.使用线、图表示查询记录和统计消费结果
3.可参考实际情况对软件进行功能扩充

三、 设计要求

1.校园卡消费记录文件为fee.txt,所有消费记录以交易日期从小到大排序(该文件自行建立)。要求编程序实现查询、排序、统计、录入、更新等功能。具体要求如下:
(1)要求显示如下界面


1------查询 2------排序 3------统计 4------录入 5------更新


通过选择1-4来确定要做哪一个操作。
(2)若选择1则出现如下界面


1-----按固定时段查询 2-----按日期区间段查询 3-----按交易金额查询
4-----已删除记录查询(管理员才有此项功能)


通过选择1-4来确定操作,有符合的记录输出到屏幕,若无,则输出相关提示信息。
2.若选2,按消费记录的交易日期、金额、次数中一个进行(升序或降序)排序。
3.若选3,统计一个时间段里的消费总金额统计,并显示结果。
4. 若选4,删除指定的消费记录,并把删除后剩下的数据保存到文件fee_del.txt中。
5.不同的模块都要有出错处理,并能给出出错提示。如输入数据错误,文件操作错误等等
6.以上各个功能均编写成子函数,有良好的注释说明,由主函数调用实现。
7.必须采用结构体和动态链表实现对消费记录数据的存储和访问;
8. 必须使用文件保存数据
9.应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观
二、测试数据要求
(1)不少于3个学生的消费记录;(2)不少于10个月的消费记录;
(3)每个月的消费不少于5个; (4)删除的消费记录不少于20条;

正文+历程

1、有许多要求,并且第一次做代码量比较大的程序,所以很多实现都很做的很冗杂,没有仔细的优化。
2、花了两天的时间打代码,一天的时间调整界面+修改BUG 。
3、要求是多文件,这里放在一起方便看,实际交给老师是有用多文件的

收获

1、在后来看别人贪吃蛇的项目代码的时候,get到一个小点,就是项目中有多个函数,我们可以先声明函数,然后写主函数,后面再定义函数。
这样子不用担心调用的时候起冲突。我下面的代码就没有这么做,为了避免调用的时候调用不到特意排顺序,花了一些时间。
然后我们就在文件开头声明函数那里,注释定义函数的代码所在的行数,这样别人浏览代码(要看某个功能的代码、跳转到那里时)容易些。
2、感觉下次做这类型的程序会顺手很多,思路更加清晰
3、用了选择排序对算法进行排序,并且交换的不是数据域,而是进行了指针的交换,在数据域里面存储的信息非常多的时候,这样做会更加高效。这是一个优点。
4、有对用户的输入进行判断,不会在用户输入错误时程序给崩掉。

反思

1、耗时超出自己的规定,我觉得这个最多花一天半就应该做好。没想到最后会多花一天在界面的完善和改几个BUG上。
2、最后代码的共600多行,觉得偏多。当然这跟用了好多个switch有关。
3、信息的查找很慢,可以用更好的存储方式来实现更快的查询。
4、登陆界面的账号和密码验证,并没有想到什么好的方法来实现,而是用了几个数组。
5、没有做一个输出函数,导致代码量很大。
6、没有多文件编程,全都打在一个源文件里面了。

程序的运行需要在对应目录下有对应的文件,还要在文件中先存好普通用户和管理员的名字和密码。
所以直接复制黏贴没法运行。

代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define max(a,b) ((a)>(b)?a:b)
//信息存储的顺序为:流水号、用户编号、交易日期、入账日期、交易额、交易后余额、交易类型、交易次数、交易地点
char boss_name[100],boss_secret[100];//管理员的正确的账号和密码
char user_name1[100],user_secret1[100],user_name2[100],user_secret2[100],user_name3[100],user_secret3[100];//用户的正确的账户名和密码
char now_name[100],now_secret[100];//用户输入的账户名和密码
bool isboss=0,isuser=0;//标记是否是管理员,是否是用户
typedef struct Node{int water_num,id,t_date,in_date,money,remain,times;//这条信息的流水单号 ,用户的编号 ,交易日期,入账日期,交易额,交易后余额,交易次数char type[100],place[100];//交易类型,交易地点struct Node *next;
}node;
int now_id=0,w_num=1;//now_id是用户的编号,分别为1、2、3.而管理员的编号为0
node*head=NULL;
node*head1=NULL;
//0、初始的菜单
int menu()
{printf("\n ----------校园一卡通功能----------\n");printf("|1、查询功能             |\n");printf("|2、排序功能             |\n");printf("|3、数据录入             |\n");printf("|4、显示功能             |\n");printf("|5、数据变更             |\n");printf("|6、统计功能             |\n");printf("|0、退出程序             |\n");printf(" ----------------------------------\n");printf("请输入想要执行的功能(数字):");int num;while(scanf("%d",&num)){if(num>=0&&num<=6) return num;printf("输入有误,请重新输入(数字):"); }
}
//0、初始的菜单
//0、登陆并识别身份部分
int judge_if_boss()
{int flag_boss=1;if(strcmp(now_name,boss_name)||strcmp(now_secret,boss_secret))flag_boss=0;return flag_boss;
}
int judge_if_user()
{   int flag_user=1;if(strcmp(now_name,user_name1)||strcmp(now_secret,user_secret1))flag_user=0;  if(flag_user==1)return 1; flag_user=2;   if(strcmp(now_name,user_name2)||strcmp(now_secret,user_secret2))flag_user=0;if(flag_user==2)return 2;flag_user=3;if(strcmp(now_name,user_name3)||strcmp(now_secret,user_secret3))flag_user=0;if(flag_user==3)return 3;return flag_user;
}
int login()
{/*管理员默认用户名:boss默认密码:123456第一个普通用户默认用户名:haha默认密码:123456 第二个……共三个用户 */FILE *stream=fopen("boss_secret.txt","r");fscanf(stream,"%s %s",boss_name,boss_secret);stream=fopen("user_secret.txt","r");fscanf(stream,"%s %s",user_name1,user_secret1);fscanf(stream,"%s %s",user_name2,user_secret2);fscanf(stream,"%s %s",user_name3,user_secret3);printf("\n --------------校园一卡通登陆--------------\n");printf("|请输入用户名称:              |\n|");scanf("%s",now_name);printf(" ------------------------------------------\n");printf("|请输入用户密码:              |\n|");scanf("%s",now_secret);printf(" ------------------------------------------\n");for(int i=1;i<=5;i++){if(judge_if_boss()){printf("欢迎管理员\n");isboss=1;break;}if(now_id=judge_if_user()){printf("欢迎用户\n");isuser=1;break;}printf("账号或密码出错,(剩余%d次机会)\n",5-i);memset(now_name,'\0',sizeof(now_name));memset(now_secret,'\0',sizeof(now_secret));printf("\n --------------校园一卡通登陆--------------\n");printf("|请输入用户名称:               |\n|");scanf("%s",now_name);printf(" ------------------------------------------\n");printf("|请输入用户密码:              |\n|");scanf("%s",now_secret);printf(" ------------------------------------------\n");}return 0;
}
//0、登陆并识别身份部分
//0、成功进入程序后对之前存在文件中的数据进行读取
node*read_txt(node*head)
{   FILE*stream=fopen("fee.txt","r");int n=0;node*p1=NULL,*p2=NULL;p1=(node*)malloc(sizeof(node));for(head=NULL;fscanf(stream,"%d %d %d %d %d %d %s %d %s",&p1->water_num,&p1->id,&p1->t_date,&p1->in_date,&p1->money,&p1->remain,p1->type,&p1->times,p1->place)!=-1;){w_num++;w_num=max(w_num,p1->water_num);n++;if(n==1)head=p1;else p2->next=p1;p2=p1;p1=(node*)malloc(sizeof(node));}return head;
}
node*read_delete_data(node*head1)
{FILE*stream=fopen("fee_undel.dat","r");int n=0;node*p1=NULL,*p2=NULL;p1=(node*)malloc(sizeof(node));for(head1=NULL;fscanf(stream,"%d %d %d %d %d %d %s %d %s",&p1->water_num,&p1->id,&p1->t_date,&p1->in_date,&p1->money,&p1->remain,p1->type,&p1->times,p1->place)!=-1;){n++;if(n==1)head1=p1;else p2->next=p1;p2=p1;p1=(node*)malloc(sizeof(node));}return head1;
}
//0、成功进入程序后对之前存在文件中的数据进行读取
//1、查询部分
int out_put_it(node*p)
{printf("\n--------------------------------------------------------------------------------------------------------------------------------------\n");printf("信息流水号  |用户编号   |交易日期   |入账日期   |交易额    |交易后余额  |交易类型   |交易次数   |交易地点       |\n");printf("%d      %d      %d  %d  %d      %d  %s      %d      %s\n",p->water_num,p->id,p->t_date,p->in_date,p->money,p->remain,p->type,p->times,p->place);printf("--------------------------------------------------------------------------------------------------------------------------------------\n");return 0;
}
int search_it(int num,node*head)//传进来的num 是对应的查询的依据
{int num1=-1,num2=-1;switch(num){case 1://按月查询printf("请输入要查询的月份:");while(scanf("%d",&num1)&&(num1<1||num1>12))printf("输入有误,请重新输入:");break;case 2://按日查询 printf("请输入要查询的号数:"); while(scanf("%d",&num1)&&(num1<1||num1>31))printf("输入有误,请重新输入:");break;case 3://按学年 printf("请输入要查询的年份:");while(scanf("%d",&num1)&&(num1<0||num1>2020))//这里的年份的最大值得与时俱进 printf("输入有误,请重新输入:");break;case 4://自定义时间段查询 printf("请输入要查询的起始日期和终止日期,例(20190101 20190224):");while(scanf("%d %d",&num1,&num2)&&(num1>num2))printf("输入有误,请重新输入:");           break; case 5://按交易金额查询printf("请输入要查询的交易金额:");while(scanf("%d",&num1)&&num1<0)printf("输入有误,请重新输入:"); break;}node*p=head;while(p!=NULL){switch(num){case 1://按月查询if(isboss==1&&(p->t_date%10000/100==num1))out_put_it(p);//输出这一整条数据else if(now_id==p->id&&isboss==0&&(p->t_date%10000/100==num1))out_put_it(p);break;case 2://按日查询 if(isboss==1&&(p->t_date%100==num1))out_put_it(p);else if(now_id==p->id&&isboss==0&&(p->t_date%100==num1))out_put_it(p);break;case 3://按学年 if(isboss==1&&(p->t_date/10000==num1))out_put_it(p);else if(now_id==p->id&&isboss==0&&(p->t_date/10000==num1))out_put_it(p);break;case 4://自定义时间段查询 if(isboss==1&&(p->t_date>=num1&&p->t_date<=num2))out_put_it(p);else if(isboss==0&&now_id==p->id&&(p->t_date>=num1&&p->t_date<=num2))out_put_it(p);break; case 5://按交易金额查询if(isboss==1&&(p->money==num1))out_put_it(p);else if(p->id==now_id&&isboss==0&&p->money==num1)out_put_it(p);break;}p=p->next;}return printf("\n****无更多信息****\n")*0;
}
int boss_search()//管理员能够查询已经删除的数据
{//管理员可查询已删除的记录//这里做错了,应该要从存放被删除的数据的链表里面进行查找 node*p=head1;  while(p!=NULL) {out_put_it(p); p=p->next;}return 0;
}
int search()
{int num;printf("\n ----------查询功能----------------\n");printf("|1、按月查询              |\n");printf("|2、按日查询             |\n");printf("|3、按年查询             |\n");printf("|4、自定义时间段查询             |\n");printf("|5、按交易金额查询          |\n");printf("|6、管理员功能->查询已删除的数据   |\n");printf("|0、返回上一层            |\n");printf(" ----------------------------------\n");while(scanf("%d",&num)){if(num>=0&&num<=6) break;printf("输入有误,请重新输入(数字):");}switch(num){case 1:case 2:case 3:case 4:case 5:search_it(num,head);break;case 6:if(isboss)boss_search();elseprintf("普通用户,无权使用该功能\n"); break;case 0:num=0;break;}return num;
}
//1、查询部分
//2、排序功能部分
node*select_sort(int choose,int rise,node*head)//用选择排序法对链表进行排序,只交换指针,没有交换数据域,这样避免了因为数据域的数据过多过大时,交换数据域效率低下的问题
{ int n=0;node*p=head;while(p!=NULL){n++;p=p->next;}node*p1=head,*pre2,*p2=head,*prem,*pm;for(int i=0;i<n;i++){for(pm=p2,p1=p2->next;p1!=NULL;p1=p1->next)switch(choose){case 1://按交易日期排序if(rise==0&&p1->t_date>pm->t_date) pm=p1;   else if(rise==1&&p1->t_date<pm->t_date)pm=p1;break;case 2://按交易金额排序 if(rise==0&&p1->money>pm->money)pm=p1; else if(rise==1&&p1->money<pm->money)pm=p1;break;case 3://按交易次数排序 if(rise==0&&p1->times>pm->times)pm=p1;else if(rise==1&&p1->times<pm->times)break;} if(pm==p2){p1=p2=p2->next;continue;}for (pre2=head;pre2->next!=p2&&pre2!=p2;pre2=pre2->next);for (prem=p2;prem->next!=pm;prem=prem->next);if (p2->next==pm){p2->next=pm->next;if(i==0)head=pm;else pre2->next=pm;pm->next=p2;}else{         prem->next=pm->next;if (i==0)head=pm;else pre2->next=pm;pm->next=p2->next;p2->next=prem->next;prem->next=p2;}if (i==0)p2=head->next;else  p2=pre2->next->next;p1=p2;}printf("****排序成功,可以使用功能4进行查看****\n");return head;
}
node* sort_it(node*head)
{//要求按消费记录的交易日期、金额、次数中一个进行(升序或降序)排序。printf("\n -----------------------------\n");printf("|1、按交易日期排序            |\n");printf("|2、按交易金额排序            |\n");printf("|3、按交易次数排序            |\n");printf(" -----------------------------\n");printf("请输入要排序的依据:");int choose;scanf("%d",&choose); while(choose<1||choose>3){printf("输入有误,请重新输入:");scanf("%d",&choose);  }printf("\n ---------------------------\n");printf("|0、降序排序                |\n");printf("|1、升序排序                |\n");printf(" ---------------------------\n");printf("请输入要排序的方式:"); int rise=0;scanf("%d",&rise);while(rise<0||rise>1){printf("输入有误,请重新输入:");scanf("%d",&rise);}head=select_sort(choose,rise,head); return head;
}
//2、排序功能部分
//3、数据录入部分
node* input(node* head)
{node *p1,*p2=head;//p1前驱指针,p2后驱指针 int n=0;printf("\n---------------------------------------------------------------------------------------------------------------\n");printf("|用户编号  |交易日期   |入账日期   |交易额    |交易后余额  |交易类型   |交易次数   |交易地点   |\n");printf("请按顺序依次输入数据,中间用空格隔开(在输入时输入0 0 0 0 0 0 0 0以结束输入):");if(head!=NULL){//如果不链表不为空,让p2指向最后的节点 while(p2->next!=NULL)p2=p2->next;n=1;}p1=(node*)malloc(sizeof(node)); for(;scanf("%d %d %d %d %d %s %d %s",&p1->id,&p1->t_date,&p1->in_date,&p1->money,&p1->remain,p1->type,&p1->times,p1->place);){p1->water_num=w_num++; printf("-------------------------------------------------------------------------------------------------------------\n");if(p1->id==0&&p1->t_date==0&&p1->in_date==0&&p1->money==0&&p1->remain==0&&p1->times==0)break;  n++;if (n==1)head=p1;else p2->next = p1;p2=p1;p1=(node*)malloc(sizeof(node));printf("\n-------------------------------------------------------------------------------------------------------------\n");printf("|用户编号    |交易日期   |入账日期   |交易额    |交易后余额  |交易类型   |交易次数   |交易地点   |\n");printf("请按顺序依次输入数据,中间用空格隔开(在输入时输入0 0 0 0 0 0 0 0以结束输入):");}return head;
}
//3、数据录入部分
//4、显示功能部分 ,4.显示功能:可进行全部消费记录的显示,也可按照查询结果进行显示
int show_all(node*head)
{node*p=head;while(p!=NULL){out_put_it(p);p=p->next;}return 0;
}
int show_someone(int number,node*head)
{node*p=head;while(p!=NULL){if(p->water_num==number)out_put_it(p);p=p->next;}return 0;
}
int show(node*head)
{int choose;printf("\n ---------------------------------------\n");printf("|1、管理员功能:显示所有信息        |\n");printf("|2、管理员功能:显示某一用户的信息   |\n");printf("|3、用户功能:显示自己的信息      |\n");printf(" ---------------------------------------\n");printf("请输入要使用的功能(数字):");scanf("%d",&choose);while((choose<1||choose>3)||(isboss==0&&choose==1)||(isboss==0&&choose==2)||(isboss==1&&choose==3)){printf("输入有误请重新输入:");scanf("%d",&choose);}switch(choose){case 1:show_all(head);break;case 2:printf("请输入要查询的用户的编号:");int nchoose;scanf("%d",&nchoose);while(nchoose<1||nchoose>3){printf("输入有误,请重新输入:");scanf("%d",&nchoose);} show_someone(nchoose,head);break;case 3:show_someone(now_id,head);break;}return 0;
}
//4、显示功能部分
//5、数据变更功能
node* delete_data(node*head)
{int num,flag=0;node*p1=head,*p2=head;FILE *stream=fopen("fee_undel.dat","a+");printf("请输入要删除的数据的流水单号:");scanf("%d",&num);while(p1!=NULL){if(p1->water_num==num){fprintf(stream,"%d %d %d %d %d %d %s %d %s\n",p1->water_num,p1->id,p1->t_date,p1->in_date,p1->money,p1->remain,p1->type,p1->times,p1->place);//删除的时候,因为删除的数据要存入文档中,而数据在程序结束后才会录入文档,所以这里要将数据放入一个专门存储删除的数据的链表            if(p1==head&&p1->next==NULL)head=NULL;else if(p1==head&&p1->next!=NULL)head=p1->next;elsep2->next=p1->next;node*p=head1;head1=p1;p1->next=p;flag=1;printf("删除成功\n");break;}p2=p1;p1=p1->next;}p1=p2=NULL;if(flag==0)printf("查无此数据\n");return head;
}
node* alter(node*head)
{int num,flag=0;node*p1=head,*p2=head;   printf("请输入要修改的数据的流水单号:");scanf("%d",&num);while(p1!=NULL){if(p1->water_num==num){printf("要修改的信息为:\n");//修改信息的时候不修改流水号 printf("\n--------------------------------------------------------------------------------------------------------------------\n");printf("用户编号 |交易日期   |入账日期   |交易额    |交易后余额  |交易类型   |交易次数   |交易地点   |\n");printf("%d  %d  %d  %d  %d  %s  %d  %s\n",p1->id,p1->t_date,p1->in_date,p1->money,p1->remain,p1->type,p1->times,p1->place); printf("\n--------------------------------------------------------------------------------------------------------------------\n");printf("用户编号 |交易日期   |入账日期   |交易额    |交易后余额  |交易类型   |交易次数   |交易地点   |\n");printf("请输入新的数据:"); scanf("%d %d %d %d %d %s %d %s",&p1->id,&p1->t_date,&p1->in_date,&p1->money,&p1->remain,p1->type,&p1->times,p1->place);   printf("\n--------------------------------------------------------------------------------------------------------------------\n");printf("删除成功\n");flag=1;break;}p2=p1;p1=p1->next;}if(flag==0)printf("查无此数据\n");return head;
}
node* change(node*head)
{int choose;printf( " ---------------------------\n""|1、修改数据                |\n""|2、删除数据                |\n"" ---------------------------\n""请输入要执行的功能(数字):");scanf("%d",&choose);while(choose<1||choose>2){printf("输入有误,请重新输入:");scanf("%d",&choose);}if(choose==2)return head=delete_data(head);elsereturn head=alter(head);
}
//5、数据变更功能
//6、统计功能部分
node*count_it(node*head)
{int start,end,total_money=0;if(isboss==1){printf("欢迎管理员,请输入要统计的用户的编号:");scanf("%d",&now_id);}printf("请输入起始时间,例:(20180101):");scanf("%d",&start);printf("请输入终止时间:");scanf("%d",&end); node*p=head;while(p!=NULL){if(p->id==now_id&&p->t_date>=start&&p->t_date<=end)total_money+=p->money;p=p->next;}printf("用户%d在%d至%d时间段消费的总金额为:%d\n",now_id,start,end,total_money);if(isboss==1)now_id=0;//在管理员统计某个用户时,借用now_id简化了代码,最后还原为管理员的id return head;
}
//6、统计功能部分
//0、退出功能,退出前会存储
int save_txt(node *head)
{node*p=head;FILE *stream=fopen("fee.txt","w+");//以覆盖的形式修改了储存的信息,因为每次运行程序的时候都会先读取原先存储的信息 while(p!=NULL){fprintf(stream,"%d %d %d %d %d %d %s %d %s\n",p->water_num,p->id,p->t_date,p->in_date,p->money,p->remain,p->type,p->times,p->place);p=p->next;}return 0;
}
//0、退出功能,退出前会存储
int main()
{int run=1;login();if(!isboss&&!isuser)//如果既不是用户又不是管理员,无法进入程序。 return 0;head=read_txt(head);//这里进入程序了,需要对存在文件中的数据进行读取head1=read_delete_data(head1);//读入被删除的存储在另一个文件夹里面的数据,到一个专门存储被删除的信息的链表里面 while(run){switch(menu()){case 1://1、查询搜索功能---完成 while(search());break;case 2://2.排序功能---完成head=sort_it(head);break;case 3://3、数据录入---完成 if(isboss)head=input(head);elseprintf("普通用户无权使用该权限\n");break;case 4://4、显示功能 ---完成 show(head);break;case 5://5、数据变更功能---完成 if(isboss)head=change(head);elseprintf("普通用户无权使用该功能\n"); break;case 6://6、统计功能---完成 head=count_it(head); break;case 0://存储信息并退出程序---完成 run=save_txt(head);break;}}return 0;
}

2019大一寒假作业:校园一卡通信息管理系统相关推荐

  1. 计算机毕业设计ssm校园招聘信息管理系统64f99系统+程序+源码+lw+远程部署

    计算机毕业设计ssm校园招聘信息管理系统64f99系统+程序+源码+lw+远程部署 计算机毕业设计ssm校园招聘信息管理系统64f99系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S ...

  2. 校园请假信息管理系统的背景分析,所涉及问题在国内外的研究现状综述

    校园请假信息管理系统是为了方便学生进行请假申请,方便学校对请假信息进行管理而设计的一种信息管理系统.该系统可以提高请假效率,降低学生请假的时间成本,同时可以有效减轻教师.辅导员等管理人员的工作压力.本 ...

  3. 基于Java毕业设计校园闲置物品信息管理系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计校园闲置物品信息管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计校园闲置物品信息管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构 ...

  4. java毕业生设计校园闲置物品信息管理系统计算机源码+系统+mysql+调试部署+lw

    java毕业生设计校园闲置物品信息管理系统计算机源码+系统+mysql+调试部署+lw java毕业生设计校园闲置物品信息管理系统计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构 ...

  5. 软件实习实验四 校园一卡通数据库管理系统的开发

    2020-12-24 源代码在Github:https://github.com/llq-007/Campus-card-database-management-system 文章目录 项目概述及设计 ...

  6. JAVA大作业 | 学生成绩信息管理系统

    > * *JAVA大作业 | 学生成绩管理系统(含有用户界面)*** ----- ps :多个包写在一起---– package test; import java.awt.*; import ...

  7. C++大作业--班级同学信息管理系统

    在这个学期,老师布置了C++课程程序设计报告 题目如下: 所设计的班级同学信息管理系统应具有以下功能: 1.登录功能:登录该系统时需要输入登录密码,默认的密码是666,可修改登录密码. 2.数据输入功 ...

  8. QT大作业之---学生信息管理系统

    金樽清酒斗十千,玉盘珍羞直万钱. 停杯投箸不能食,拔剑四顾心茫然. 欲渡黄河冰塞川,将登太行雪满山. 闲来垂钓碧溪上,忽复乘舟梦日边. 行路难!行路难!多歧路,今安在? 长风破浪会有时,直挂云帆济沧海 ...

  9. 个人信息管理系统c语言作业,个人物品信息管理系统 C语言.doc

    个人物品信息管理系统 C语言 个人物品信息管理系统 C语言 #include #include #include #include typedef struct z1 /*定义数据结构*/ { cha ...

最新文章

  1. 【leetcode】Search in Rotated Sorted Array II(middle)☆
  2. Oracle 唯一 索引 约束 创建 删除
  3. oracle生成42位,Oracle HowTo:如何确定Oracle是32 Bit(位)的还是64 Bit(位)的?
  4. 缺少using namespace std;
  5. 论一切都是文件之匿名 inode
  6. 在Visual Studio 2005中调试SQL Server 2005的存储过程 (转)
  7. 批量替换文件字体,简体-繁体
  8. 梯形图c语言编程比较,PLC编程语言梯形图与结构化文本的比较
  9. 【c语言】解释为什么32767+1=-32768
  10. Relion在K1 Power Linux实践
  11. 从零开始的RVOS: Referring Video Object Segmentation
  12. 鸡啄米:C++编程入门系列之四(数据类型)
  13. 推荐系统三十六式(刑无刀)学习笔记(四)
  14. 网络安全:网络攻击原理与方法.
  15. 学友新碟lt;lt;private corner迷你音乐会gt;gt;CD/DVD超赞呀
  16. git 问题解决之remote: Permission to xxx/xxx.git denied to xxx.
  17. 为什么公司的运营都会有负债的出现?
  18. 学生书桌护眼灯哪个牌子好?光照不刺眼的智能护眼台灯
  19. 被人打了要不要还手呢?
  20. 联通定制无线猫管理员账户密码(大连测试好用)

热门文章

  1. 最小环 floyd java_最小环(floyd)
  2. 匹维托客户关系对于机构资产管理
  3. c# 图片转Base64 Base64转图片
  4. 七牛云存储_入门及使用
  5. android ffmpeg+OpenGL播放yuv+openSL 快放 慢放 视频播放器
  6. addons软件下载_addons制作器最新版
  7. 强大的批量重命名工具A Better Finder Rename
  8. html中的float含义,float是什么意思?
  9. 基于51单片机烟雾报警器mq2烟雾报警ADC0832采集
  10. QAD任命Anton Chilton为首席执行官兼董事会成员